Browse Source

Transférer les fichiers vers 'livre_blanc_marine_juliette_python.py'

master
m_galanth 1 year ago
parent
commit
661fb02d0b
  1. 955
      livre_blanc_marine_juliette_python.py/livre_blanc_marine_juliette_python.py

955
livre_blanc_marine_juliette_python.py/livre_blanc_marine_juliette_python.py

@ -0,0 +1,955 @@
# -*- coding: utf-8 -*-
"""Livre_Blanc_Marine-Juliette_Python.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1MY9m-Ale5GWIUsUCztdeual4xa5vAruZ
```
Équipe 3 - Marine GALANTH - Juliette VUONG
Team Python & PowerBI
```
## **Chapitre 1 : Décrire les données**
##**Comment importer un jeu de donnée sur Python ?**
"""
#1ere étape: importer les libraires nécéssaires à l'analyse des données
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
"""**Pandas** est une bibliothèque open-source conçue principalement pour travailler avec des données relationnelles ou étiquetées de manière simple et intuitive. Elle fournit diverses structures de données et opérations pour la manipulation de données numériques et de séries temporelles.
**Seaborn** est une bibliothèque permettant de réaliser des graphiques statistiques en Python. Elle s'appuie sur matplotlib et s'intègre étroitement aux structures de données pandas. Il aide à explorer et à comprendre vos données. Ses fonctions de traçage opèrent sur des dataframes et des tableaux contenant des ensembles de données entiers et effectuent en interne la mise en correspondance sémantique et l'agrégation statistique nécessaires pour produire des tracés informatifs.
**Matplotlib** est une bibliothèque de traçage pour le langage de programmation Python et son extension de mathématiques numériques NumPy. Elle fournit une API orientée objet permettant d'intégrer des tracés dans des applications utilisant des boîtes à outils d'interface graphique à usage général comme Tkinter, wxPython, Qt ou GTK. Il existe également une interface procédurale "pylab" basée sur une machine à états (comme OpenGL), conçue pour ressembler de près à celle de MATLAB, bien que son utilisation soit déconseillée[3] SciPy utilise Matplotlib.
"""
#2eme étape: ouvrir le jeu de donnée en Data Frame
df = pd.read_csv("HR_training.csv",delimiter=";",decimal=",")
df
"""## I. La typologie des données
La typologie de données est un ensemble de catégories ou de types qui permettent de classer les données selon leur structure, leur format et leur comportement. Elle permet de définir les différents types de données utilisés dans une application ou un système informatique, afin de les gérer de manière cohérente et efficace. C'est un élément important pour la conception de bases de données et l'implémentation de systèmes informatiques.
Les types de données couramment utilisés incluent les nombres, les chaînes de caractères, les dates, les booléens, etc.
### *A.Les variables quantitatives*
Les variables quantitatives peuvent prendre des valeurs numériques.
Elles mesurent donc des "quantités" (comparaisons, additions, soustractions) telles que :
* Le poids d'un véhicule en kilogrammes
* Le temps nécessaire pour accomplir une tâche en minutes ou secondes
* Le nombre de tâches réussies.
Les variables quantitatives peuvent être discrètes ou continues.
##### **Les variables discrètes**
Les variables discrètes ne peuvent prendre qu'un ensemble spécifiaue de valeurs : elles ont un nombre fini de valeurs. Elles peuvent être énumérées ('1, 2, 3,...'). Pour cela, on peut généralement l'énoncer sous la forme « Le nombre de ».
Par exemple :
* le nombre ditems dans une liste.
* le nombre de personnes dans une salle.
##### **Les variables continues**
Les variables continues peuvent prendre n'importe quelle valeur dans une plage de données.
Par exemple :
* La température
* La taille, le poids dune personne
* La vitesse dune voiture
Les variables continues peuvent être mesurées avec une précision infinie.
### *B.Les variables qualitatives*
Les variables qualitatives sont des variables qui décrivent une caractéristique ou un trait qui ne peut pas être mesuré numériquement.
Par exemple :
* La couleur des yeux
* Le sexe
* La marque d'un véhicule
##### **Les variables nominales**
Les variables nominales n'ont pas d'ordre ou de classement particulier. Elles sont utilisées pour classer et catégoriser les données en différents groupes ou catégories.
Par exemple :
* La profession
* La religion
* La couleur des yeux
Les variables nominales sont généralement représentées par des mots ou des étiquettes. Ainsi, il n'est pas logique d'effectuer des opérations mathématiques sur celles-ci.
Elles sont principalement utilisées dans les statistiques descriptives pour compter le nombre d'observations dans chaque catégorie.
##### **Les variables ordinales**
Les variables ordinales sont généralement représentées par des mots ou des étiquettes et peuvent être triées en fonction du degré de la catégorie. Cela se fait généralement de manière naturelle.
Elles ne peuvent pas être utilisées pour des calculs mathématiques mais elles sont utilisées pour faire des comparaisons entre catégories.
Les variables ordinales sont le plus souvent utilisées pour établir un classement ou un ordre.
Par exemple :
* Questionnaire sur une échelle de Likert (1 : pas du tout daccord, 2 5 : Tout à fait daccord)
* Notes alphabétiques (A+, A,..)
* Degré de satisfaction (de 0 à 10)
Il faut tenir compte du fait que le même intervalle de "1" ne signifie pas nécessairement la même chose.
##**Connaître le type des données de toutes les colonnes**
"""
#La fonction .info() permet de connaitre le type de donnée des colonnes
df.info()
"""##**HR_training : donnée quantitative ou qualitative**
Ci-dessous les données ainsi que leurs typologies :
- Id : Numéro du collaborateur: **qualitative nominale**
- Satisfaction level : Niveau de satisfaction des collaborateurs: **quantitative continue**
- Last evaluation : Niveau de satisfaction des collaborateurs lors de lévaluation précédente: **quantitative continue**
- Number project : Nombre de projets portés par le collaborateur : **quantitative discrète**
- Average monthly hours : Nombre dheures mensuel moyen dun collaborateur : **quantitative discrète**
- Time spent company : Nombre dannées passées au sein de lentreprise: **quantitative discrète**
- Work accident : Information qui précise si le collaborateur a subi un accident du travail : **qualitative nominale**
- Promotion last 5 years : Information qui précise si le collaborateur a é sujet à une promotion durant les 5 dernières années: **quanlitative nominale**
- Job : Secteur dans lequel travaille le collaborateur: **qualitative nominale**
- Salary : Salaire du collaborateur (bas, moyen, haut) : **qualitative nominale**
- Left : Si le collaborateur a finalement quitté lentreprise ou non: **qualitative nominale**
## II. Catégories de données
Les variables sont-elles dépendantes ou indépendantes ? Que signifient ces notions ?
### *A.Les variables dépendantes*
Une variable dépendante est affectée par une ou plusieurs variables indépendantes.
Elle est souvent appelée variable de résultat ou de réponse et est généralement représentée par la lettre « y » en notation mathématique.
La valeur de la variable dépendante est déterminée par les valeurs des variables indépendantes.
* Par exemple, dans une étude sur l'effet de la température sur la croissance des plantes, la variable dépendante serait la croissance de la plante, tandis que la variable indépendante serait la température.
### *B.Les variables indépendantes*
Les variables indépendantes ne sont pas affectées par d'autres variables du modèle.
Elles sont généralement interprêtées comme des prédicteurs ou variables explicatives dans une étude.
Les effets des variables indépendants sur la/les variables dépendantes sont généralement analysés à l'aide de techniques statistiques telles que l'analyse de régression.
####**HR_training : variable indépedantes ou dépendantes ?**
En catégorisant les données du fichier :
- Id : Numéro du collaborateur: **variable indépendante**
- Satisfaction level : Niveau de satisfaction des collaborateurs: **variable indépendante**
- Last evaluation: Niveau de satisfaction des collaborateurs lors de lévaluation précédente : **variable indépendante**
- Number project : Nombre de projets portés par le collaborateur : **variable indépendante**
- Average monthly hours : Nombre dheures mensuel moyen dun collaborateur : **variable indépendante**
- Time spent company : Nombre dannées passées au sein de lentreprise: **variable indépendante**
- Work accident : Information qui précise si le collaborateur a subi un accident du travail : **variable indépendante**
- Promotion last 5 years : Information qui précise si le collaborateur a é sujet à une promotion durant les 5 dernières années: **variable indépendante**
- Job : Secteur dans lequel travaille le collaborateur: **variable indépendante**
- Salary : Salaire du collaborateur (bas, moyen, haut) : **variable indépendante**
- Left : Si le collaborateur a finalement quitté lentreprise ou non: **variable dépendante**
## III. La transformation des données
- Les premiers indicateurs que nous avons décidé de transformer sont le niveau de satisfaction et le niveau de satisfaction des collaborateurs lors de lévaluation précédente.
> Ces indicateurs quantitatifs et nominaux étant sous la forme d'un indice allant de 0 à 1 (maximum) ont alors été transformés en des variables qualitatives ordinales.
- Pour cette transformation, nous avons imaginé des classements par niveau de satisfaction en remplacement des précédents indices :
- Un niveau de satisfaction appartenant à l'intervalle [0;0,49] révèlera un niveau de satisfaction médiocre ou très faible;
- Un état de satisfaction d'ordre 0,5 démontrera la neutralité de la satisfaction de l'employé qui n'est alors ni trop peu satisfait ni trop fortement satisfait;
- Le niveau de satisfaction élevé appartenant à l'intervalle [0,51;1] montre la satisfaction de l'employé ou sa très haute satisfaction. Le maximum, 1 représentant sa satisfaction absolue.
> Au contraire, le second indicateur transformé, "Job" est un indicateur qualitatif nominal représentant les secteurs d'activité présents dans l'entreprise selon leur nom.
- Afin que la transformation de la donnée en une variable qualitative puisse en variable quantitative puisse être réalisée, nous avons décider de regrouper le nombre de travailleurs par secteur.
"""
df2=df.assign(satisfaction_segment='satisfaction', left_segment='demision')
df2.head()
#transformer les valeurs quantitatives en qualitative d'une colonne "satisfaction_level"
for x in range(10051):
if df["satisfaction_level"][x]<= 0.49:
df2['satisfaction_segment'][x] = "poor"
elif df["satisfaction_level"][x]>= 0.5:
df2['satisfaction_segment'][x] = "neutral"
elif df["satisfaction_level"][x] > 0.70:
df2['satisfaction_segment'][x] = "good"
#transformer les valeurs quantitatives en qualitative d'une colonne "left"
#1 --> salariés ayants quitté la société
#0 --> salariés actuels
for x in range(10051):
if df["left"][x] == 0 :
df2['left_segment'][x] = "non"
elif df["left"][x]== 1:
df2['left_segment'][x] = "oui"
df2.head()
#retirer la colonne id_colab
df2=df2.drop(columns=["id_colab"])
#afficher le nouveau Dataframe
df2
df2.info()
"""## IV.Les mesures de tendance centrale
La dispersion, également connue sous le nom de variabilité ou propagation, fait référence à la mesure dans laquelle un ensemble de données varie ou s'écarte de sa tendance centrale.
Il existe plusieurs mesures de dispersion.
Celles-ci donnent une idée de la répartition des données et de la façon dont les données sont réparties autour de la tendance centrale.
### *A.La moyenne*
La moyenne est une mesure de la tendance centrale calculée en additionnant un ensemble de nombres, puis en divisant par le nombre de valeurs de l'ensemble. La valeur résultante est la moyenne et donne une idée de la valeur typique ou moyenne dans un ensemble de données.
* Par exemple, si un ensemble de cinq nombres est : {1, 2, 3, 4, 5}, la moyenne est (1 + 2 + 3 + 4 + 5) / 5 = 15 / 5 = 3.
La moyenne est sensible aux valeurs aberrantes : si un ensemble de nombres contient une ou plusieurs valeurs extrêmement élevées ou faibles, la moyenne sera affectée et peut ne pas représenter avec précision la valeur typique de l'ensemble.
Dans de tels cas, d'autres mesures de tendance centrale, telles que la médiane ou le mode, pourraient être plus informatives.
"""
#Calcul de la moyenne
df2.mean(numeric_only=True) # mean signifie moyenne
"""Commentaires :
- Le niveau de satisfaction des collaborateurs est, en moyenne, d'environ 61%. Cela représente un niveau de satisfaction supérieur à la médiane, 50%. Autrement dit, la majorité des collaborateurs ont attribué une note supérieure à la moyenne. Cela signifie que la plupart des personnes sont satisfaite.
- La note moyenne de la dernière évaluation est d'environ 0,72. La satisfaction est supérieure à 0,5 et proche de la note maximale : 1.
- Le nombre moyen de projets confiés à un collaborateur est de 3,80, soit 3 ou 4 projets.
- En moyenne, un collaborateur travaille près de 201 heures.
- Un collaborateur passe en moyenne 3,5 ans dans l'entreprise.
- Le nombre moyen d'accidents de travail est de l'ordre de 0,15. Ce nombre étant très proche de 0, on peut dire que les accidents sont quasi nuls. Toutefois, ce nombre n'est pas égal à 0 ce qui signifie qu'il y a quand même des accidents, même s'ils sont en proportion très faible.
- Le nombre moyen de promotions attribuées est de 0,02. Ce nombre est très faible car quasiment égal à 0,
- En moyenne, il y a 24% de départ de la part des collaborateurs de l'entreprise.
### *B.La médiane*
La médiane est une valeur statistique qui sépare un ensemble de données en deux moitiés. C'est la valeur médiane lorsqu'un ensemble de données est classé par ordre de grandeur.
* Si l'ensemble de données a un nombre impair d'observations, la médiane est la valeur médiane.
* Si l'ensemble de données a un nombre pair d'observations, la médiane est la moyenne des deux valeurs médianes.
C'est une mesure de tendance centrale, comme la moyenne ou le mode.
"""
#Calcul de la médiane
df2.median(numeric_only=True) #médian signifie médiane
"""### *C.Le mode*
Le mode est la valeur qui apparaît le plus fréquemment dans un jeu de données. C'est une mesure de tendance centrale, comme la moyenne et la médiane.
Un jeu de données peut avoir un mode, plusieurs modes (multimodal) ou aucun mode du tout. En l'absence de mode, le jeu de données est dit non modal.
Le mode n'est défini que pour les ensembles de données avec des valeurs discrètes, si les données sont continues, la valeur modale ne peut pas être calculée.
"""
#Calcul du mode
mode=df2.value_counts().idxmax()
print(mode)
"""Commentaires :
- La valeur apparaissant le plus de fois dans le tableau concernant la satisfaction des collaborateurs est de 0,46. Cette valeur est légèrement inférieure à 0,50 : la plupart des collaborateurs semble légèrement insatisfaite.
- La dernière note d'évaluation revenant le plus souvent est de 0,57. Elle est supérieure à la note médiane de 0,5 ce qui signifie que l'évaluation est assez correcte.
- Le nombre de projet attribué au collaborateurs est, le plus souvent, de l'ordre de 2.
- La plupart des collaborateurs travaillent 139 heures.
- En général, les collaborateurs mettent fin à leur contrat au bout de 3 ans.
- Généralement les collaborateurs ne subissent pas d'accidents de travail.
- Le plus souvent, on observe que l'entreprise n'attribue pas de promotions aux salariés.
- Le service le plus conséquent en terme d'effectif moyen est le département des ventes.
- Le plus souvent les employés ont un salaire situé dans la fourchette basse de l'ensemble des salaires distribués aux employés.
- En général, les employés ont préféré quitter l'entreprise.
## V.Les mesures de dispersion et de position
Les mesures de dispersion et de position sont utilisées pour décrire respectivement la propagation et l'emplacement d'un ensemble de données.
Les mesures de dispersion, telles que la variance ou l'écart type, décrivent le degré auquel les valeurs d'un ensemble de données varient et s'écartent de la tendance centrale. Elles donnent une idée de la répartition notamment autour de la tendance centrale.
Les mesures de position, telles que les centiles ou les quartiles, décrivent l'emplacement d'une valeur spécifique ou d'un groupe de valeurs dans un jeu de données.
Ces mesures donnent une idée de la position des données dans l'ensemble de données.
### *A.L'écart-type*
L'écart type permet de mesurer la variance des valeurs d'un échantillon statistique ou d'une distribution de probabilité. Il est défini comme étant la racine carrée de la variance ou, de manière équivalente, la racine carrée moyenne des écarts par rapport à la moyenne.
L'écart type est aussi utilisé pour calculer d'autres notions comme :
* le coefficient de corrélation
* le coefficient de variation
* la répartition optimale de Neyman.
L'écart type est une mesure de la dispersion des données autour de la moyenne. Plus précisément, l'écart type mesure la quantité de variation ou de diffusion des valeurs dans un ensemble de données.
Plus l'écart type est grand, plus les données sont dispersées ; plus l'écart type est petit, plus les données sont concentrées autour de la moyenne.
L'écart type est un indicateur important pour comprendre la distribution des données et peut être utilisé pour évaluer la fiabilité et la robustesse des résultats statistiques.
"""
#Calcul de l'écart type
df2.std(numeric_only=True) #std signifie l'écart type
"""### *B.La variance*
La variance est utilisée pour caractériser la dispersion dune distribution ou dun échantillon. Il est possible de linterpréter comme la dispersion des valeurs par rapport à la moyenne. Elle mesure la moyenne de la distance des valeurs individuelles par rapport à la moyenne.
Concrètement, la variance est définie comme la moyenne des carrés des écarts à la moyenne. La considération du carré de ces écarts évite que sannulent des écarts positifs et négatifs.
La variance est souvent utilisée en statistiques pour mesurer l'incertitude ou la variabilité d'un ensemble de données.
Elle peut aider à évaluer la robustesse et la fiabilité des résultats statistiques et est souvent utilisée pour comparer les distributions de données et pour effectuer des tests statistiques.
"""
#Calcul de la variance
df2.var(numeric_only=True) #var signifie la variance
"""### *C.La fréquence*
La fréquence dune valeur donné représente le quotient (la division) de leffectif de la valeur par leffectif total. Intuitivement, elle indique la proportion de la présence de la valeur dans la liste.
C'est le nombre de fois où une valeur particulière apparaît dans un ensemble de données.
En statistiques, la fréquence est utilisée pour décrire la distribution des données et peut être présentée sous forme de tableau de fréquence, de histogramme ou de courbe de densité.
La fréquence peut aider à identifier les tendances centrales dans les données et peut fournir une description concise des données. Elle peut également être utilisée pour effectuer des tests statistiques et des analyses de données.
On dit qu'une fréquence forte désigne un événement ou une observation qui se produit fréquemment dans un échantillon ou une population, et inversement lorsqu'il s'agit d'une fréquence faible.
En général, la fréquence est un indicateur important pour comprendre la distribution des données et peut aider à prendre des décisions informées basées sur les données.
"""
#Calcul de la fréquence
count1 = df2['salary'].value_counts()
print(count1)
count2 = df2['job'].value_counts()
print(count2)
count3 = df2['promotion_last_5years'].value_counts()
print(count3)
count4 = df2['left_segment'].value_counts()
print(count4)
count4 = df2['satisfaction_segment'].value_counts()
print(count4)
count5 = df2['work_accident'].value_counts()
print(count5)
"""### *D. L’étendue (minimum, maximum)*
L'étendue mesure la dispersion des données dans un échantillon ou une population. C'est la différence entre le plus grand et le plus petit élément d'un ensemble de données :
- **Minimum** est la valeur la plus petite atteinte par une quantité variable ; limite inférieure (s'oppose à maximum).
- **Maximum** est la valeur la plus grande atteinte par une quantité variable ; limite supérieure (s'oppose à minimum).
L'étendue d'un ensemble de données donne une idée de la variabilité des valeurs dans ce jeu de données.
Plus l'étendue est grande, plus les valeurs sont dispersées, et inversement. L'étendue peut être utilisée pour comparer la variabilité entre deux ou plusieurs ensembles de données.
Elle est souvent utilisée conjointement avec d'autres mesures de la dispersion des données, telles que la moyenne, la variance et l'écart type.
Cette mesure peut donner une idée rapide de la dispersion des données, tandis que ces autres mesures peuvent fournir une description plus détaillée de la dispersion.
"""
#Calcul du min
df2.min(axis=0)
#Calcul du max
df2.max(axis=0)
"""### *E. Le percentile*
Un percentile est un concept de statistique qui permet de déterminer la position dune personne par rapport à un groupe donné. Il désigne un niveau dans une distribution de données qui représente la valeur en-dessous de laquelle se trouve un certain pourcentage d'observations.
Les percentiles sont utilisés pour décrire la distribution des données et pour effectuer des comparaisons entre les groupes.
Le groupe est divisé en 99 parts, chacune correspondant à un centile, cest-à-dire à 1/100 du groupe: le 1er centile, le 2ème centile, le 3ème centile () le 99ème centile.
Les percentiles peuvent être calculés à partir de l'ensemble complet des données ou à partir d'un échantillon de données. Ils peuvent également être utilisés pour déterminer la répartition des observations par rapport à une référence, telle qu'une moyenne ou une médiane.
Ils sont un outil important en statistiques pour comprendre et décrire la distribution des données et pour effectuer des comparaisons entre les groupes. Ces mesures peuvent fournir une description détaillée de la distribution des données et peuvent être utilisés pour évaluer les tendances et les anomalies dans les données.
"""
#Trouver le 25ème percentile de chaque colonne
df2.quantile(.25)
#Trouver le 50ème percentile (median) de chaque colonne
df2.quantile(.50)
#Trouver le 75ème percentile de chaque colonne
df2.quantile(.75)
"""## **Calculer les mesures de tendance centrale ou dispersion et de position:**"""
# la fonction .describe() permet d'identifier la moyenne, médiane, variance, percentile, écart-type d'un jeu de donnée
#applymap('{:.2f}'.format) >>> arrondiir à 2 chiffres après la virgule
df2.describe().applymap('{:.2f}'.format)
# l'ajout describe(include=[object]) permet d'identifier uniquement pour les valeurs de type 'objet' :
#top/mode > la valeur la plus courante
#freq > la fréquence de la valeur la plus courante
#unique > le nombre de modalité possible dans la colonne (le nombre de choix possibles)
df2.describe(include=[object])
"""## **Présentation graphique via PowerBI**"""
#Représentation graphique de la variable satisfaction_level
sns.histplot(df2["satisfaction_level"])
"""***Commentaire :***
Ce graphique représente le niveau de satisfaction des utilisateurs au travail.
On remarque que les notes sont hétérogènes : la densité obeservée montre des notes comprises dans l'intervalle [0;1].
- Une partie de cette densité montre que certains collaborateurs sont insatisfaits (notes comprises dans [0;0,5]) tandis que d'autres le sont (notes comprises dans l'intervalle [0,5;1]).
- La densité se révèle assez faible en ce qui concerne les notes inférieures à 0,5 contrairement aux notes supérieures à 0,5 : globalement, on peut donc en déduire que la majorité des collaborateurs sont satisfaits.
"""
#Représentation graphique de la variable last_evaluation
sns.histplot(df2["last_evaluation"])
"""***Commentaire :***
Ce second graphique montre le niveau de satisfaction des collaborateurs lors de lévaluation précédente.
- On note un pic du niveau de satisfaction des employés entre 0,5 et 0,6 puis un second à 0,9.
- Les notes les plus basses sont peu nombreuses et tournent autour de 0,3.
- Globalement, la satisfaction est assez forte : la densité révélant une densité importante dés la note de 0,5 et se poursuivant jusque la note de 1.
"""
#Représentation graphique de la variable number_project
sns.histplot(df2["number_project"])
"""***Commentaire :***
Ce graphique décompte le nombre de projets portés par les employés.
On remarque que le nombre de projet est très variable : les pics les plus importants impliquent les collaborateurs portent majoritairement entre 3 et 4 projets (il s'agit d'environ 5500 employés au total *-environ 2600 employés portent 3 projets et 2900, 4 projets-* soit plus 50% de la totalité des employés (environ 10 000 personnes)).
"""
#Représentation graphique de la variable average_montly_hours
sns.histplot(df2["average_montly_hours"])
"""***Commentaire :***
Ce graphique montre le nombre d'heures mensuelles travaillées par les employés.
- On note deux pics aux alentours de 120-150h et 270-280h.
- Par ailleurs, la plupart des heures effectuées par les salariés sont généralement comprises entre ces valeurs, soit l'intervalle [120;280] : très peu d'employés font moins que 120h et plus que 280h.
"""
#Représentation graphique de la variable time_spend_company
sns.histplot(df2["time_spend_company"])
"""***Commentaire :***
Ce graphique représente le nombre moyen d'années passées par un collaborateur dans l'entreprise.
- Il démontre que, les employés restent, en général plus ou moins 3 ans.
- Autrement, les employés restant le moins longtemps, quittent la société au bout de 2 ans.
- Au contraire ils quittent la société lorsqu'ils atteignent 4, 5, ou 6 ans et plus rarement au bout de 8 ou 10 ans.
"""
#Représentation graphique de la variable work_accident
sns.histplot(df2["work_accident"])
"""***Commentaire :***
Ce graphique représente le nombre d'accident de travail dans l'entreprise.
En termes de proportions, selon les densités représentées :
- on note que le nombre d'accidents est assez faible (au niveau de 1, signifiant qu'il y a eu un accident): 1478 accidents ont eu lieu sur les 10 000 employés.
- pour appuyer cet argument, la densité au niveau du 0 signifant qu'il n'y a pas eu d'accident est beaucoup plus volumineuse montrant que la plupart des employés n'a pas subi d'accident (plus de 75% des employés). Toutefois, le nombre d'accidents n'est pas nul.
"""
#Représentation graphique de la variable job
sns.histplot(df2["job"])
plt.xticks(rotation=-45)
"""***Commentaire :***
Ce graphique représentant le volume des collaborateurs par services dans l'entreprise montre que le service "sales" compte l'effectif le plus important de collaborateurs (plus de 2 500 personnes). Il est suivi par le service "technical" (environ 1 750 personnes), puis celui du "support" (environ 1 500 personnes).
"""
#Représentation graphique de la variable salary
sns.histplot(df2["salary"])
"""***Commentaire :***
Ce graphique représente les niveau de salaires des collaborateurs de l'entreprise.
- Les salaires les moins importants sont attribués à une grande partie des employés (environ 50% de la globalité des collaborateurs).
- Les salaires moyens vont à 40% des salariés.
- Les salaires les plus hauts sont attribués à 10% des employés.
## **Chapitre 2 : Exploration les données**
## I. Comparer des variables
### *A.Tableau de corrélation*
Une variable numérique est un type de donnée représentant une valeur numérique telle quun entier ou un décimal.
Elles sont souvent utilisées dans les opérations mathématiques et lanalyse statistique. On les retrouve également dans les langages de programmation (R, Python et Java).
Exemples :
- Âge
- Poids
- Température
Le tableau de corrélation présente les coefficients entre plusieurs variables. Chaque ligne et colonne du tableau représente une variable différente.
Quant aux cellules, elles représentent lintersection entre ces variables et renvoient le coefficient de corrélation entre ces variables.
Le coefficient de corrélation est une valeur comprise entre -1 et 1 qui indique la force et la direction de la relation entre les deux variables. Un coefficient de corrélation de 1 indique une corrélation positive parfaite (lorsqu'une variable augmente, l'autre augmente également). Tandis quun coefficient de -1 indique une corrélation négative parfaite (lorsqu'une variable augmente, l'autre diminue) et un coefficient de 0 renvoie une corrélation nulle.
Les tables de corrélation sont souvent utilisées dans les statistiques et l'analyse des données pour identifier rapidement la relation entre différentes variables.
"""
#Correlation (Pearson) entre deux variables quantitatives d'un DataFrame
corr=df2['number_project'].corr(df2['average_montly_hours'])
print(corr)
"""***Commentaire :***
Le coefficient de corrélation entre les variables "number_projet" et "average_montly_hours" est positif et est de 0,42.
Cela montre que ces deux variable ssont positivement corélées : si la première variable augmente, la seconde augmente également. Autrement dit, plus le nombre de projets augmente, plus le nombre d'heures travaillées augmente.
"""
#Correlation entre toutes les colonnes d'un DataFrame
corr2=df2.corr()
corr2
#Créer un graphique représentative d'une matrice de corrélation Pearson
corr_df=df2.corr(method='pearson')
sns.heatmap(corr_df, annot = True)
plt.title("Matrice de corrélation")
plt.show()
"""### *B. Khi-deux*
Le test du Khi-deux -ou Chi-square test est un test statistique utilisé pour déterminer sil existe une différence significative entre une distribution de fréquence observée et une distribution théorique.
Il permet de tester la qualité de l'ajustement d'un ensemble de données observées à une distribution de probabilité spécifique.
Le test du Khi-deux est utilisé pour tester l'indépendance de deux variables catégorielles (variable qui prend pour valeur des modalités, des catégories ou bien des niveaux, par opposition aux variables quantitatives qui mesurent une quantité) dans un tableau de contingence.
Un tableau de contingence est une méthode de représentation de données issues dun comptage permettant d'estimer la dépendance entre deux caractères. Elle consiste à croiser deux caractères d'une population (par exemple une classe d'âge et un score) en dénombrant l'effectif correspondant à la conjonction « caractère 1 » et « caractère 2 ».
Les effectifs partiels sont rassemblés dans un tableau à double entrée, par ligne pour le premier caractère, et par colonne en fonction du second caractère : c'est le « tableau de contingence ». Cet outil simple répond à un problème crucial en statistique : la détection d’éventuelles dépendances entre les qualités relevées sur les individus d'une population.
Lexistence de dépendances conditionnelles suggère en effet la possibilité de stocker les résultats d'un sondage de façon plus condensée.
La notion de tableau croisé dynamique, proposée par les tableurs, est une généralisation du tableau de contingence classique.
Il compare les fréquences observées dans le tableau de contingence aux fréquences attendues si les variables étaient indépendantes. La statistique de test est la statistique du Khi-deux, qui est calculée comme la somme des différences au carré entre les fréquences observées et attendues, divisée par les fréquences attendues.
Le test du chi carré est souvent utilisé dans des domaines tels que la recherche par sondage, la génétique et la recherche marketing.
"""
#p-value: la valeur p du test
#dof: degrés de liberté
#expected: les fréquences attendues, basées sur les sommes marginales du tableau
#Calculer un Khi-2 avec deux variables qualitatives
contigency = pd.crosstab(df2['job'], df2['left_segment'], normalize='index')
contigency
#Créer un graphique représentative du Khi-Test
plt.figure(figsize=(12,8))
sns.heatmap(contigency, annot=True, cmap="YlGnBu")
plt.title("Khi-2 graphique sur les variables left et job")
plt.show()
"""***Commentaire :***
En général, il y a très peu de départ par service.
Les salariés du service management sont 86% moins suceptible de quitter leurs postes etant donné qu'il ya un faible lien avec le valeur left_segment d'un volonté de quitter l'entreprise.
Toutefois, les salariés des services "accounting", "hr", "sales" sont plus proche de 0,donc il y a un très grand lien avec l'attribut "oui" pour quitter l'entreprise.
### *C. Corrélation de Spearman*
La corrélation de Spearman est l'équivalent non paramétrique de la corrélation de Pearson. Mesure la relation entre deux variables.
Elle est utilisée lorsque les variables sont ordinales, discrètes ou non distribuées normalement.
Cette corrélation utilise RANK plutôt que des valeurs de données.
L'interprétation du coefficient de corrélation obtenu reste la même que lors de l'utilisation de la corrélation de Pearson. Les coefficients de corrélation varient entre -1 et 1. Ici, 0 indique une relation nulle entre les deux variables, et une valeur négative (corrélation négative) signifie que lorsque l'une des variables augmente, l'autre diminue. En revanche, une valeur positive (corrélation positive) indique que les deux variables évoluent ensemble dans le même sens.
Dès lors, sa valeur fluctuera d'un échantillon à l'autre. On veut donc savoir si, dans la population ces deux variables sont réellement corrélées ou pas. On doit donc réaliser un test d'hypothèse. (Biostatistique,2021)
"""
#Calculer un Khi-2 avec deux variables qualitatives
from scipy.stats import spearmanr
rho, p = spearmanr(df['left'], df['salary'])
print(rho)
print(p)
#Créer un graphique représentative d'une matrice de corrélation Spearman
corr = df2.corr(method = 'spearman')
sns.heatmap(corr, annot = True)
plt.title("Corrélation de Spearman")
"""### *D. Test de Student*
Le test de Student, également appelé *test t* ou distribution t, est un test statistique courant utilisé pour mesurer la différence entre deux groupes ou les moyennes de groupe par rapport à une valeur standard. Elle est basée sur une loi de probabilité appelée loi de Student. Le but de la réalisation de ce test est de comprendre si la différence est statistiquement significative, c'est-à-dire non due au hasard.
Les analystes peuvent utiliser des tests t pour déterminer s'il existe des facteurs qui influencent la différence dans les résultats observés pour plusieurs échantillons.
Nous pouvons utiliser la statistique t pour répondre à cette question. Cela indique que les différences observées peuvent être dues au hasard. Si cette probabilité est très faible, la différence est dite significative ou statistiquement significative.
Dans le test t, nous créons d'abord une hypothèse nulle. Cela signifie que les deux populations sont égales et qu'il n'y a pas de différence significative entre elles. Les tests de Student prouvent ou infirment l'hypothèse nulle.
Pour exécuter la distribution T de Student, vous avez besoin de cinq éléments :
* Différence moyenne des ensembles de données
* Écart type (variance) de chaque échantillon
* Nombre de données dans chaque groupe
* Valeur 𝝰 (alpha) : C'est une marge d'erreur acceptable. Une valeur 𝝰 de 0,05 signifie un taux d'erreur acceptable de 5D44. Pour les calculs manuels, un tableau de valeurs clés est nécessaire pour aider à interpréter les résultats.
Avec ces cinq éléments en main, vous pouvez soit exécuter le test t manuellement à l'aide d'une formule (la formule est disponible plus loin dans cet article), soit utiliser un progiciel statistique tel que SPSS ou Minitab pour générer automatiquement les résultats. (Qualtrics XM,2022)
"""
from scipy import stats
#Définir les deux variables d'échantillon
a= df2['average_montly_hours']
b= df2['number_project']
#Appliquer le t-test
t2 = stats.ttest_ind(a,b)
t2
#Créer un graphique représentative T-Test
sns.kdeplot(t2,shade=True)
plt.title("T-Test")
"""### *E. Heatmap*
Une heatmap est une représentation graphique des données les valeurs individuelles sont représentées sous forme de couleurs. Il est utilisé pour représenter visuellement la distribution et la densité des points de données en deux dimensions (souvent l'axe des x et l'axe des y) à l'aide d'une échelle de couleurs.
En règle générale, l'axe des x et l'axe des y représentent les variables mesurées, tandis que l'intensité de la couleur représente l'amplitude de la variable.
Par exemple, dans un jeu de données comportant de nombreuses colonnes, une carte thermique peut être utilisée pour afficher la corrélation ou la relation entre différentes colonnes.
Il est souvent utilisé dans la visualisation de données, le traitement d'images et les statistiques.
Les cartes thermiques peuvent être créées à l'aide de divers outils logiciels, notamment Excel, des bibliothèques Python telles que Matplotlib et Seaborn, des bibliothèques R telles que ggplot2 et plotly, et des outils de visualisation en ligne tels que Plotly et Tableau. Le choix de l'outil dépendra des exigences spécifiques du projet et du niveau d'interactivité et de personnalisation requis.
## II. Analyser la variance
L'analyse de la variance a pour but la comparaison des moyennes de k populations, à partir d'échantillons aléatoires et indépendants prélevés dans chacune d'elles.
Ces populations sont en général des variantes (ou niveaux k) d'un ou plusieurs facteurs contrôlés de variation (facteur A, B).
### *A. ANOVA à un facteur*
Un test ANOVA à un facteur est utilisé pour déterminer s'il existe une différence significative dans les moyennes de deux groupes ou plus. Dans ce cas, le seul facteur fait référence à une seule variable indépendante ou à un seul facteur utilisé pour diviser les données en différents groupes.
L'hypothèse nulle du test est qu'il n'y a pas de différence de moyennes entre les groupes et l'hypothèse alternative est qu'il existe au moins une paire de moyennes différentes.
La statistique de test est calculée à l'aide de la variance entre les groupes et au sein des groupes. Une valeur de p est obtenue, qui peut être utilisée pour déterminer s'il faut rejeter ou ne pas rejeter l'hypothèse nulle
"""
#Importer une librairie
from scipy.stats import f_oneway
#Effectuer un ANOVA
x=f_oneway(df2.left, df2.satisfaction_level)
print(x)
"""***Commentaire :***
La statistique F et la valeur p s'avèrent être égales à 5794.3 et 0,0 respectivement. Comme la valeur p est inférieure à 0,05, nous rejetons l'hypothèse nulle.
Cela implique que nous avons suffisamment de preuves pour affirmer qu'il existe un lein entre le niveau de satisfaction et la volonté de quitter l'entreprise.
"""
plt.subplots(figsize=(5,5))
ax = sns.boxplot(x="left_segment", y="satisfaction_level", data=df2)
"""***Commentaire :***
Ce graphique montre que les salariés ayant quittés l'entrepise ne sont pas satisfaits. En parallèle, ceux qui sont restés dans l'entreprise ont un niveau de satisfaction entre 0.5 et 0.8, avec une moyenne de 0.7
### *B. ANOVA à plusieurs facteurs*
Un test ANOVA (analyse de variance) à plusieurs facteurs, également appelé ANOVA multifactorielle ou ANOVA factorielle, est utilisé pour déterminer l'effet de plusieurs variables indépendantes ou facteurs sur une variable dépendante.
Dans ce cas, les données sont divisées en groupes en fonction des niveaux de chacun des facteurs.
Par exemple, s'il y a deux facteurs, chacun avec deux niveaux, les données seraient divisées en quatre groupes.
L'hypothèse nulle est qu'il n'y a pas de différence de moyennes entre les groupes et l'hypothèse alternative est qu'il existe au moins une paire de moyennes différentes.
La statistique de test est calculée à l'aide de la variance entre les groupes et au sein des groupes et une valeur de p est obtenue, qui peut être utilisée pour déterminer s'il faut rejeter ou ne pas rejeter l'hypothèse nulle.
Le test peut également être utilisé pour déterminer quels facteurs et leurs interactions ont un effet significatif sur la variable dépendante.
"""
plt.subplots(figsize=(15,8))
ax = sns.boxplot(x="satisfaction_level", y="salary", data=df2)
"""***Commentaire :***
En moyenne, le niveau de satisfaction est similaire selon le niveau de salaire des collaborateurs. Néanmoins, l'étendue est plus important pour les salariés à faible salaire.
## **Chapitre 3 : Modéliser les données**
## I. Quel est le profil des collaborateurs qui vont quitter l'entreprise ?
Il peut y avoir de nombreuses raisons pour lesquelles les collaborateurs quittent leur entreprise.
En général, les employés quittent leur entreprise lorsqu'ils ne se sentent plus satisfaits de leur environnement de travail.
Il est donc important pour les entreprises de s'assurer que leurs employés se sentent valorisés et appréciés, et de fournir des opportunités pour le développement professionnel et la croissance personnelle.
Quelques caractérisitques de la personne susceptible de quitter l'entreprise :
- le nombre de projet ( > 6 projet) (surcharge de travail)
- salaire (faible salaire face à la charge de travail attribuée)
- la satisfaction (niveau de satisfaction compris dans l'intervalle [0;0,4])
- ancienneté (la plupart des employés ne restant pas après 3 ans)
## II. Pourquoi les collaborateurs quittent l'entreprise ?
### *A. Une régression logistique et les paramètres du modèle*
La regression logistique est un modèle statistique qui permet d'étudier les relations entre différents variables qualitatives ou indépendantes, nommée X, avec une seule varible qualitative ou dépendante, nommée y. Comme le modèle linéaire, la fonction logistique définit une fonction lien. Graphiquement, elle est réprésentée sous la forme une courbe en S
Les modèles de régression logistique peuvent également prédire la probabilité qu'un événement se produise ou ne se produise pas en optimisant les coefficients de régression. Le résultat obtenu se situera toujours entre 0 et 1. Si la valeur est près de 0, la probabilité est faible que l'événement arrive, alors que si la valeur est près de 1, la probabilité est élevée.
*Par exemple, le jeu de donnée Titanic a identifié que la probabilité de survie pour les passages masculin de 0,0810 par rapport aux passages feminin. Nous interpréterions le rapport de cotes comme la probabilité de survie des hommes diminuée d'un facteur de 0,0810 par rapport aux femmes, en maintenant toutes les autres variables constantes.* (IBM, 2022)
> Dans notre étude de cas, nous avons crée le dateframe en données numérique, pour cela nous avons supprimé les données des colonnes "job" et "salary" pour les remplacer par des chiffres.
Ainsi, les valeurs de la colonne "salary" ne sont plus nominales mais ordinales.Les bas salaires mentionnés "low" sont dorénavant identifés par le chiffre 1, puis les salaires moyens mentionnés "medium" par le chiffre 2 et les slaires "high" mentionés par le chiffre 3. D'un autre côté, les jobs sont aussi identifées par les chiffres suivants:
"accounting": 1, "sales": 2, "hr": 3, "technical": 4, "support": 5, "management": 6, "IT": 7, "product_mng": 8, "marketing": 9, "RandD": 10
"""
#Transformer toutes les colonnes job et salary données en valeurs numériques
df_num=df.assign(job='', salary='')
df_num.head()
#Transformer les valeurs qualitative en quantitatives d'une colonne "salary"
for x in range(10051):
if df["salary"][x] == "low":
df_num['salary'][x] = 1
elif df["salary"][x] == "medium":
df_num['salary'][x] = 2
elif df["salary"][x] == "high":
df_num['salary'][x] = 3
#Transformer les valeurs qualitative en quantitatives d'une colonne "salary"
for x in range(10051):
if df["job"][x] == "accounting":
df_num['job'][x] = 1
elif df["job"][x] == "sales":
df_num['job'][x] = 2
elif df["job"][x] == "hr":
df_num['job'][x] = 3
elif df["job"][x] == "technical":
df_num['job'][x] = 4
elif df["job"][x] == "support":
df_num['job'][x] = 5
elif df["job"][x] == "management":
df_num['job'][x] = 6
elif df["job"][x] == "IT":
df_num['job'][x] = 7
elif df["job"][x] == "product_mng":
df_num['job'][x] = 8
elif df["job"][x] == "marketing":
df_num['job'][x] = 9
elif df["job"][x] == "RandD":
df_num['job'][x] = 10
#Visualiser les premiers lignes du nouveau DataFrame
df_num.head()
"""Nous définissons les variables indépendantes de notre modèle. Dans ce cas, nous utilisons toutes nos données caractéristiques pour prédire quel est le profil d'un salarié qui peut quitter l'entreprise.
Nous divisons nos données en deux parties : les données d'entraînement et les données de test afin d'effectuer une validation croisée de notre modèle.
Ici, nous utiliserons 80 % de données de formation et 20 % de données de test. Pour diviser nos données, nous devons importer train_test_split de la bibliothèque sklearn. Nous mélangeons également nos données de manière aléatoire pour éviter tout problème de biais à l'aide de "random_state", l'algorithme de mélange reste le même, afin de produire des résultats cohérents plus faciles à évaluer.Nous importons la fonction de régression logistique de la bibliothèque sci-kit learn et l'appliquons à nos données.
Enfin, nous utilisons y_pred pour obtenir un ensemble de valeurs prédites à partir de nos données de test, afin d'évaluer notre modèle.
"""
X = df_num.drop(['id_colab','left'], axis=1) # Features
y = df_num.left # Target variable
# split X and y into training and testing sets
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=16)
# import the class
from sklearn.linear_model import LogisticRegression
# instantiate the model (using the default parameters)
logreg = LogisticRegression(random_state=16)
# fit the model with data
logreg.fit(X_train, y_train)
y_pred = logreg.predict(X_test)
# import the metrics class
from sklearn import metrics
cnf_matrix = metrics.confusion_matrix(y_test, y_pred)
cnf_matrix
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
# Generate random data for the regression
X, y = make_classification(n_samples=100, n_features=10)
# Create the logistic regression object
reg = LogisticRegression().fit(X, y)
# Get the coefficients and intercept
intercept = reg.intercept_[0]
coeff = reg.coef_[0][0]
# Define the decision boundary function
def decision_boundary(prob):
return -(intercept + coeff * prob) / reg.coef_[0][1]
# Generate the points for the decision boundary
boundary_x = np.linspace(X[:, 0].min(), X[:, 0].max(), 100)
boundary_y = decision_boundary(boundary_x)
# Plot the data points and decision boundary
plt.scatter(X[y == 0][:, 0], np.zeros(len(X[y == 0][:, 0])), label="Class 0")
plt.scatter(X[y == 1][:, 0], np.zeros(len(X[y == 1][:, 0])), label="Class 1")
plt.plot(boundary_x, boundary_y, 'k-', label="Decision boundary")
plt.legend()
plt.xlabel("Feature")
plt.ylabel("Probability")
plt.show()
"""### *B. Pourquoi on utilise la régression logistique ?*
La régresion logistique est utilisée pour la classification et les problèmes de prédiction. elle est couramment utilisée dans les cas suiviant :
* Détection de la faude
* Prédiction des maladies
* Prédiction des attrition (indicateurs de performance)
### *C. La différence entre une régression logistique et une régression linéaire*
La principale différence entre la régression logistique et la régression linéaire est que la régression logistique fournit un résultat constant, tandis que la régression linéaire fournit un résultat continu.
Dans la régression logistique, le résultat, tel qu'une variable dépendante, n'a qu'un nombre limité de valeurs possibles. La régression logistique est utilisée lorsque la variable réponse est catégorique, comme oui/non, vrai/faux et réussite/échec.
Cependant, en régression linéaire, le résultat est continu, ce qui signifie qu'il peut avoir n'importe laquelle parmi un nombre infini de valeurs possibles. La régression linéaire est utilisée lorsque la variable réponse est continue, comme le nombre d'heures, la taille et le poids.
Avec les prédictions de régression logistique, seules des valeurs ou des catégories spécifiques sont autorisées. Par conséquent, la régression logistique peut prédire si l'élève a réussi ou échoué. Puisque les prédictions de régression linéaire sont continues, comme les nombres dans une plage, elles peuvent prédire le résultat de l'élève sur une échelle de 0 à 100.(LeMagIT, 2019)
### *D. La validité de votre modèle (R², p-value,...)*
La valeur R² vous indique la quantité de variation expliquée par votre modèle. Ainsi, un R-carré de 0,1 signifie que votre modèle explique 10 % de la variation des données. Plus le R² est élevé, meilleur est le modèle. La valeur p, quant à elle, vous renseigne sur le test d'hypothèse de la statistique F, à savoir que "l'ajustement du modèle à interception seule et celui de votre modèle sont égaux". Ainsi, si la valeur p est inférieure au seuil de signification (généralement 0,05), votre modèle s'adapte bien aux données.
Vous avez donc quatre scénarios :
1. R² faible et une valeur p faible (valeur p <= 0,05).
Cela signifie que votre modèle n'explique pas une grande partie de la variation des données mais qu'il est significatif (mieux que de ne pas avoir de modèle).
2. R² faible et valeur p élevée (valeur p > 0,05)
Cela signifie que votre modèle n'explique pas une grande partie de la variation des données et qu'il n'est pas significatif (le pire scénario).
3. R² élevé et p-value faible
Cela signifie que votre modèle explique une grande partie de la variation des données et qu'il est significatif (meilleur scénario).
4. R² élevé et valeur-p élevée
Cela signifie que votre modèle explique beaucoup de variations au sein des données mais qu'il n'est pas significatif (le modèle n'a aucune valeur).
### *E. Profil d'un salarié qui risque de quitter l'entreprise*
Selon l'ensemble des variables étudiées précédemment, les collaborateurs quittent l'entreprise en raison :
- d'un niveau de satisfaction faible : en effet le niveau de satisfaction est lié au départ des collaborateurs de manière négative. Plus le niveua de satisfaction est bas, plus les collaborateurs souhaitent quitter l'entreprise.
- d'une faible note attribuée au cours de la dernière évaluation.
- du nombre de projet trop important : en effet l'employé qui est en charge de trop de tâches sera surchargé de travail ce qui va influencer de manière négative son bien-être au travail et le poussera donc à quitter la société.
- du nombre trop important d'heures travaillées psr mois : comme expliqué précédemment, la surcharge de travail n'impacte pas positivement les décisions de départ des employés : plus les périodes de travail denses sont fréquentes, moins l'employé souhaitera rester dans l'entreprise.
- de l'ancienneté : au-delà d'un certain nombre d'années, l'employé ne quitte plus la société ou alors plutôt tardivement.
- de la non-attribution de promotion sur 5 années : plus le nombre de promotions attribué augmente moins le salarié souhaitera quitter l'entreprise. En revanche s'il n'est jamais gratifié, sa décision de quitter se révèlera.
- du nombre d'accidents de travail : moins il y a d'accidents de travail, plus le salarié sera en confiance pour travailler dans l'entreprise et aura plus de mal à la quitter.
"""
Loading…
Cancel
Save