Thématiques principales

vendredi 15 mars 2019

Math: Analyse des données

L’analyse des données consiste à extraire des informations supplémentaires à celles-ci. Elle peut mener à découvrir des choses aussi bien spécifique en faisant apparaître des cas particulier mais aussi des choses générales et transverses.  Bien sur, on ne peut demander le même genre d’informations selon le type de données que l’on observe mais on peut dégager des tendances.

Analyse de données quantitatives

Les données quantitatives sont les plus évidente à analyser car celles ci se prêtent bien aux analyses statistiques. On utilisera donc naturellement des outils comme la moyenne [1], la variance [2], l'écart-type [2] ou encore la médiane [3].



import pandas as pd
import matplotlib.pyplot as plt

dataBrut={"celine":3000,"mickael":1200,"jeremy":1350,"benoit":5000,"julien":2500,"pierre":2200,"jacques":3100,
         "henry":1450,"zull":900,"claire":1400,"will":3500,"estelle":2500,"jeanne":2000,"michelle":2700,"emilie":2000}

dataBrut2={"celine":"F","mickael":"M","jeremy":"M","benoit":"M","julien":"M","pierre":"M","jacques":"M",
         "henry":"M","zull":"M","claire":"F","will":"M","estelle":"F","jeanne":"F","michelle":"F","emilie":"F"}

dataPD=pd.Series(dataBrut)
dataPD.columns = ['nom', 'salaire']

dataPD2=pd.Series(dataBrut2)
dataPD2.columns = ['nom', 'sexe']

dataPD=pd.DataFrame({ "salaire":dataBrut,"sexe":dataPD2})
#print(dataPD)

print("max {0}".format(dataPD.max()))
print("min {0}".format(dataPD.min()))
print("moyenne {0}".format(dataPD.mean()))
print("mediane {0}".format(dataPD.median()))
print("variance {0}".format(dataPD.var(ddof=0)))
print("eccart-type {0}".format(dataPD.std(ddof=0)))

fig = plt.figure(1,figsize=(10,10))
plt.plot(dataPD["salaire"],"b-")
plt.show()



max salaire    5000
sexe          M
dtype: object
min salaire    900
sexe         F
dtype: object
moyenne salaire    2320.0
dtype: float64
mediane salaire    2200.0
dtype: float64
variance salaire    1.059267e+06
dtype: float64
eccart-type salaire    1029.206814
dtype: float64


Ici dans l’exemple, nous avons choisi d’extraire de nos données les informations suivantes:
  • le min, le max, qui vont nous permettre de borner nos données
  • la moyenne, qui représente en quelque sorte le centre de gravité de nos données
  • la médiane qui donne la valeur ou 50% des valeurs sont en dessous de celle ci (où au dessus c’est équivalent). La médiane à pour propriété contrairement à la moyenne d'être peu sensible aux valeurs extrêmes.
  • la variance qui représente la dispersion des données autour de la moyenne (en calculant la moyenne du carré des écarts à la moyenne des données (à noter que si la donnée est statistique, alors la variance devient une intégrale), (à noter également que si l’on traite de deux variables simultanément, alors on parle de covariance, nous amenant alors ensuite, après normalisation au calcul du coefficient de corrélation qui sera utile pour relier deux variables dont l'évolution comporte des liens, attention corrélation ne fait pas causalité….)
  • l'écart-type valant la racine carré de la variance, celle ci est intéressante dans le cas de loi de population dite normale (en cloche) où l’on va retrouver sous un écart type l'équivalent de près de 70% de la population et sou 2 écart types, l'équivalent de 95% de la population. Celle ci peut donc servir de métrique pour partitionner les données

On voit au passage que représenter les données brutalement comme une droite à assez peu d'intérêt ici (ces dernières n'étant pas vraiment relier de manière logique ou continue). Pour être visuellement pertinent, on va alors s'appuyer sur un histogramme [4]:


dataPD.hist()



Pourtant, sans entrer dans le détails des principes des fonctions moyennes, variances ou écart-type, les informations collectées via ces outils peuvent manquer de pertinence sur la structure de la répartition des données (par exemple si elles sont déséquilibrés ou non, si elles sont plutôt uniformément réparties [5].


dataPD.boxplot(column="salaire", vert=False)


Pour cela on va utiliser des outils comme skew donc le résultat nous donnera le sens de la symétrie  (par rapport à la moyenne):
  • Si skew =0 alors la distribution est symétrique
  • Si skew >0 alors la distribution est étalée à droite.
  • Si skew <0 alors la distribution est étalée à gauche.
Ou la fonction kurtosis qui permet de mesurer le degré “d'aplatissement” [6]


print("skw {0}".format(dataPD.skew()))
print("kur {0}".format(dataPD.kurtosis()))


skw salaire    1.026717
dtype: float64
kur salaire    1.517498
dtype: float64


Dans le cas que nous traitons ici, entre autre de salaires, on pourrait aussi s'intéresser à d’autre outils plus en relation avec des outils propre à l'économie comme la courbe de lorentz [7]mais bon… on a déjà pas mal de métrique sous la main, regardons maintenant comment faire l’analyse de données qualitative.

Pour finir, je vous laisse chercher s’il y a corrélation entre salaire et sexe dans les données (pour info, il faudra utiliser le module numpy [8])

Analyse de données qualitative

Dans le cadre des données qualitatives, il va être plus compliqué de dégager  des informations. En effet, les données qualitatives sont utilisés justement lorsqu’il faut mélanger des choux et des carottes et qu’il n’est pas forcément possible décomposer les données entre elles. Alors bien sur sur au sein d’un sous ensemble, les données bien qu’étiquetées vont posséder des caractéristiques particulières à ce sous ensembles.

Par exemple si nous prenons une population que nous étiquetons avec sur la base des genres, nous allons alors pouvoir exercer sur ces ensembles des analyses statistique au sein même de  celui ci. Pourtant, faire des comparaisons entre ces caractéristiques portent elles vraiment un sens? En fait sémantiquement non, car comparer des choux et des carottes n'a pas de sens pourtant, il est parfois possible de trouver des terrains commun qui justement permettent de justifier l'étiquetage. On entre alors la dans la classification, c’est à dire chercher des éléments comparable et suffisamment différents d’un ensemble à l’autre en vue de permettre une distinction.

Rappelez vous dans l’article sur la classification linéaire [9] où nous cherchions à séparer des ananas et des pastèques. Bien sur que ces fruits sont différents mais ils comportent malgré tout des caractéristiques comparables comme le poids, la couleur ou la rugosité.

Tout ceci nous amène alors à un outil fondamental dans l’analyse des données qualitatives : le tableau de contingence [10] et par extension la matrice de confusion [11].

La matrice de contingence

La matrice de contingence consiste en la construction d’un tableau croisé permettant la mise en rapport d’une certaine classe de données qualitatives vis à vis d’une autre classe de données qualitative dans le but de faire apparaître des corrélations entre les classes de ces différentes données.

Pour être plus explicite, considérons la problématique suivante: est ce que le moyen de transport est corrélé avec le retard au travail?

Pour répondre à cette question, rien de bien compliqué, on prend une ensemble d’individu, on les attends à leur arrivé au travail on leur demande par quel moyen sont ils venu et au passage on note a combien de temps s'élève leur retard (bien sur on anonymise les données)

Bien sur ce protocole est hautement critiquable, car il ne prend pas en compte la météo qui sur une journée peut largement biaisé les données, ou encore l’entreprise considérée ou encore tout bêtement le jour de la semaine, impliquant une motivation qui peut être largement différentes et impactant la manière de se rendre au travail. Ainsi, il faudrait réaliser cette collecte de données sur plusieurs jours, voir plusieurs semaines en échantillons dans des entreprises différentes.

Mais bon on en fera rien, on se contentera de faire une matrice des retards croisée des moyens de transports.

Considérons donc la collecte des données réalisées. Au vue de celle-ci il va donc être possible de répartir la population selon des tranches de temps de retard. Ici pour construire ces tranches, rien n'oblige à être linéaire. On peut donc faire les ensembles suivant:
  • t<0min
  • de 0<t<2 min
  • de 2<t<5 min
  • de 5<t<10 min
  • de 10<t<15 min
  • de 15<t<30 min
  • de t<30min
Ensuite on construit les catégories associés aux moyens de transports. Ici, considérons les classes suivantes: Train, vélo, métro, moto,voiture.
Ainsi on obtient le tableau suivant:


Retards VS Moyen de transport
Train
Velo
Metro
Voiture
Moto
Totaux
<0min
32
34
8
4
22
100
<2min
16
22
5
7
15
65
<5min
8
10
2
15
8
43
<10min
12
1
6
10
3
32
<15min
30
3
4
25
3
65
<30min
34
4
5
56
12
111
Totaux
132
74
30
117
63
416

L'intérêt de ce tableau, permet de mettre en évidence ce que l’on peut appeler des probabilités conditionnelles. En effet, ici nous savons que par exemple que la probabilité [12] qu’un individu ne soit pas en retard est environ de 1 chance sur 4. On la notera :



De même la probabilité qu’un individu ait pris le train est d’environ de 1 chance sur 3:



Mais alors qu’elle est alors la chance qu’un individu prenant le train ne soit pas en retard?

Pour cela, il faut alors calculer la probabilité qu’un individu soit à l’heure sachant qu’il a pris le train. On notera cela



Alors que la probabilité qu’un individu ait pris le train sachant qu’il est à l’heure, sera:



Tout cela est modélisable par la représentation ensembliste suivante [13]:



Mais où sont nos probabilités conditionnelles? En fait elle sont la, un peu caché dans l’intersection des deux ensembles. En effet si l’on cherche la probabilité qu’un individu soit à l’heure sachant qu’il à pris le train alors en fait cela signifie que l’on ausculte l’intersection des deux ensembles mais pas selon l’ensemble total des individu mais juste ceux ayant pris le train et du coup:



Il s’agit la d’une façon de réduire le problème en considérant le sous ensemble associé à P(Train)

De même si l’on considère les individu ayant pris le train sachant qu’ils sont à l’heure.



Tout cela peut sembler trivial cependant, on se rend compte que les deux égalités nous permettent de retrouver une formule fondamentale des mathématiques, la formule de Bayes.



Je ne rentrerai pas dans le détail aujourd’hui de cette formule fondamentale en statistique et en IA mais sachez qu'elle fait couler beaucoup d’encre! (Certains ont même écrit un livre sur elle! Si si) Ne vous inquiétez pas nous reviendrons sur celle ci.

Matrice de confusion

Nous terminerons sur une version un peu spéciale de la matrice de contingence : la matrice de confusion.

Un peu spécial? oui car comme nous l’avons vu, la matrice de contingence est dédié à l’analyse des données amonts, en croisant des ensembles se superposant. Cela permet entre autre de mesurer les corrélations entre les les données.

La matrice de confusion c’est un peu le nemesis de la matrice de contingence car elle ne compare pas des données entrantes mais les données de sorties avec celles escomptés.

Elle pose donc une question et son opposée et vérifie via la prédiction du modèle si elle est dans le vrai (hypothèse nulle h0  [14]) ou non (hypothèse alternative h1). Pour cela le modèle doit être confronter a la réalité afin d'en valider le comportement c'est a dire valider h0 avec des vrai positif (VP) et invalider h1 avec des vrai négatif (VN). A noter que ces concepts sont plus simple a appréhender par l'exemple  et je vous invite a consulter des exemples dans le cadres d’études médicales (cf chaine youtube MediFact [15]).


Reel/PredictionH0H1
Cas 1VPFN
Cas 2FPVN

Ainsi ici le but ne sera pas de savoir s’il y a corrélation entre les données mais à l’inverse à quel point le modèle prédictif réalise des erreurs (les cas ou il se trompe en produisant des Faux négatif aussi appelé risque alpha ou des faux positif, erreur de second degré).

Ainsi on se doute que le modèle est fortement corrélé mais comme le dit le proverbe: tout les modèles sont faux mais certains sont utiles; La c’est tout à fait ça, à quel point notre modèle est utile? où à quel point celui ci est faux!

Alors faute d'innovation, je vais reprendre un exemple que nous avions vu dans l’article sur la classification linéaire (avec notre neurone maison)

On cherche à classifier des ananas et des pastèques. Et nous avions la matrice suivante:


Reel/PredictionPastequePAnanaPTotaux reels
PastequeR1938622000
AnanasR20217982000
Totaux predit214018604000

  • 1938 Vrai Positif (c’est à dire les pastèques détectées comme tel)
  • 1798 Vrai Négatif (c’est à dire ananas détectés comme tel)
  • 62 Faux Négatif (c’est à dire une pastèque interprétées comme un ananas) risque de premier degré où risque alpha
  • 202 Faux Positif (c’est à dire un ananas détectés comme une pastèque) risque de second degré

On peut alors déduire les relations conditionnelles suivantes:


P(PR|PP)0,90560748P(PR|AP)0,03333333
P(AR|PP)0,09439252P(AR|AP)0,96666667


P(PP|PR)0,969P(AP|PR)0,031
P(PP|AR)0,101P(AP|AR)0,899

Au delà des probabilité conditionnelle, grâce à la matrice de confusion, il est possible aussi de déduire quelques métriques bien pratiques. entre autre la précision [16],  le rappel (où sensibilité), la puissance et la moyenne harmonique. Nous en avions déjà parlé dans l'article sur la classification linéaire mais très succinctement. Alors regardons ces concepts un peu plus précisément:

La précision 

La précision d’un modèle c’est le nombre d'élément correctement reconnu par rapport au nombre d'élément déclaré comme positif



 (équivalent à la probabilité conditionnelle de Pastèque sachant que l’on a prédit une pastèque, P(PastequeR,PastequeP))

Le rappel (où sensibilité)

Le rappel c’est le nombre d'élément correctement reconnu par rapport au nombre total d'élément de ce même type.



(équivalent à la probabilité conditionnelle de prédire une pastèque sachant que l’on a bien une pastèque, P(PastequeP,PastequeR))

La puissance

 Capacité à rejeter l'hypothèse nulle [17] ici équivalent à détecter les ananas  (c’est le pendant de la sensibilité)


La moyenne harmonique

Pour ceux découvrant cette moyenne, il faut savoir que au delà la moyenne classique que l’on appelle moyenne arithmétique, il existe d’autre type de moyennes comme la moyenne géométrique, la moyenne quadratique, et ici la moyenne harmonique [18]:



Celle ci à pour particularité de permettre de calculer un rapport moyen entre des données (logique en fait) la ou ces données ont un rapport de proportionnalité mais inverse entre eux.

Conclusions

Nous voilà au bout de cet article sur l’analyse des données en fonction de leur nature. L’idée est évidemment de mieux appréhender ce que l’on peut dire des données que nous manipulons en entrés des modèles mais aussi les données que nous allons en extraire.

Maintenant nous allons donc pouvoir rentrer plus en avant dans les modèles eux même (même si nous en avons déjà un peu vu certains.

Références

[1] https://fr.wikipedia.org/wiki/Moyenne
[2] https://www.youtube.com/watch?v=CiFoBkipJQk
[3] http://villemin.gerard.free.fr/Wwwgvmm/Probabil/Moyenne.htm
[4] https://fr.wikipedia.org/wiki/Histogramme
[5] https://www.stat4decision.com/fr/le-box-plot-ou-la-fameuse-boite-a-moustache/
[6] http://www.jybaudot.fr/Stats/kurtosis.html
[7] https://www.youtube.com/watch?v=jEpyGVpJvY0
[8] http://www.numpy.org/
[9] https://un-est-tout-et-tout-est-un.blogspot.com/2018/07/ai-approche-neuromimetique-la.html
[10] https://mistis.inrialpes.fr/software/SMEL/cours/sd/node16.html
[11] https://tice.agroparistech.fr/coursenligne/courses/TELEDETECTION/document/cours_teledetection/CONFUSMA.html
[12] https://www.maths-et-tiques.fr/telech/CondGM.pdf
[13] https://www.youtube.com/watch?v=X0gYOzxua64&index=2&list=PLtzmb84AoqRQkc4f38dueiPf8YUegsg8n
[14] https://www.youtube.com/watch?v=8e29AWMrcRM
[15] https://www.youtube.com/watch?v=cHWHPFPj3vg
[16] https://fr.wikipedia.org/wiki/Pr%C3%A9cision_et_rappel
[17] https://www.em-consulte.com/rmr/article/143595
[18] http://www.educatim.fr/tq/co/Module_TQ_web/co/moyenne_harmonique.html

Aucun commentaire:

Enregistrer un commentaire