Auteurs : Khaled BOUAZZA, Rayan DINAR, Olivier CHOLVY


Indication:
  • L’ensemble des graphiques ont été réalisés via la librairie plotly nous permettant de fournir un point important pour nous, des graphiques dynamiques.
  • Seule la map est en format statique.


1- Préparation de l’envirionnement


1.1- Importation des données


La première étape consiste à importer l’ensemble des données sans effectuer de modification au préalabe

Chaque table a été importée avec la fonction fread du package data.table permettant une optimisation du temps de chargement des données en comparaison à la fonction read.csv.

Affichage des premières lignes du dataframe lignesTicket.

##        IDTICKET NUMLIGNETICKET IDARTICLE QUANTITE MONTANTREMISE TOTAL
## 1: 190400316260              2    246208        1             0  4.96
## 2: 190400316262              2     33725        1             0  8.25
## 3: 190400316262              3    634497        1             0  5.79
## 4: 190400316262              1    257613        1             0 18.29
## 5: 190400316263              1    257627        1             0 49.92
## 6: 190400316265              1    320054        1             0  6.42
##    MARGESORTIE
## 1:        2.37
## 2:        3.63
## 3:        3.63
## 4:        6.21
## 5:       10.42
## 6:        0.67


1.2- Visualisation des data


Summary client :

##    IDCLIENT             CIVILITE      DATENAISSANCE         MAGASIN      
##  Length:845876      MADAME  :454862   Length:845876      PRI    : 26935  
##  Class :character   MONSIEUR:385647   Class :character   SEY    : 25967  
##  Mode  :character   Mme     :  1582   Mode  :character   VIB    : 24640  
##                     Mr      :  1710                      MOU    : 24389  
##                     madame  :  1247                      SUR    : 23784  
##                     monsieur:   828                      CLA    : 23744  
##                                                          (Other):696417  
##  DATEDEBUTADHESION  DATEREADHESION     DATEFINADHESION    VIP       
##  Length:845876      Length:845876      Length:845876      0:735425  
##  Class :character   Class :character   Class :character   1:110451  
##  Mode  :character   Mode  :character   Mode  :character             
##                                                                     
##                                                                     
##                                                                     
##                                                                     
##   CODEINSEE              PAYS       
##  Length:845876      FR     :827365  
##  Class :character   CH     : 17845  
##  Mode  :character   BE     :   235  
##                     DE     :   139  
##                     IT     :    83  
##                     (Other):   206  
##                     NA's   :     3


Summary refArticle :

##  CODEARTICLE        CODEUNIVERS        CODEFAMILLE       
##  Length:665946      Length:665946      Length:665946     
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##  CODESOUSFAMILLE   
##  Length:665946     
##  Class :character  
##  Mode  :character


Summary refMagasin :

##   CODESOCIETE    VILLE           LIBELLEDEPARTEMENT
##  ALB    : 1   Length:67          Length:67         
##  ALM    : 1   Class :character   Class :character  
##  AVI    : 1   Mode  :character   Mode  :character  
##  BAR    : 1                                        
##  BEA    : 1                                        
##  BEC    : 1                                        
##  (Other):61                                        
##  LIBELLEREGIONCOMMERCIALE
##  Length:67               
##  Class :character        
##  Mode  :character        
##                          
##                          
##                          
## 


Summary enteteTickets :

##    IDTICKET           TIC_DATE            MAG_CODE      
##  Length:6714173     Length:6714173     SSM    : 246506  
##  Class :character   Class :character   MOB    : 221283  
##  Mode  :character   Mode  :character   HEI    : 219713  
##                                        BEA    : 205468  
##                                        GEX    : 196669  
##                                        MOU    : 191180  
##                                        (Other):5433354  
##    IDCLIENT          TIC_TOTALTTC     
##  Length:6714173     Min.   :-4404.00  
##  Class :character   1st Qu.:   19.50  
##  Mode  :character   Median :   37.60  
##                     Mean   :   58.15  
##                     3rd Qu.:   71.08  
##                     Max.   :15355.25  
## 


Summary lignesTickets :

##    IDTICKET         NUMLIGNETICKET     IDARTICLE        
##  Length:34105705    Min.   :  1.000   Length:34105705   
##  Class :character   1st Qu.:  2.000   Class :character  
##  Mode  :character   Median :  4.000   Mode  :character  
##                     Mean   :  5.607                     
##                     3rd Qu.:  7.000                     
##                     Max.   :152.000                     
##     QUANTITE        MONTANTREMISE           TOTAL           
##  Min.   :-155.000   Min.   : -426.942   Min.   :-15000.000  
##  1st Qu.:   1.000   1st Qu.:    0.000   1st Qu.:     2.820  
##  Median :   1.000   Median :    0.000   Median :     5.210  
##  Mean   :   1.331   Mean   :    0.991   Mean   :     9.938  
##  3rd Qu.:   1.000   3rd Qu.:    0.473   3rd Qu.:    10.500  
##  Max.   : 999.000   Max.   :13166.667   Max.   : 15000.000  
##   MARGESORTIE        
##  Min.   :-15000.000  
##  1st Qu.:     0.990  
##  Median :     2.260  
##  Mean   :     4.225  
##  3rd Qu.:     5.210  
##  Max.   : 15000.000


1.3- Regroupement de modalités


En visualisant les données, nous nous apercevons qu’il existe 3 types de valeurs pour définir un client “Homme” et un client “Femme”.



Pour combler cette incohérence, nous avons regroupé ces 3 types de valeurs de civilité en une : “MONSIEUR” pour les hommes et “MADAME” pour les femmes car c’est la modalité représentant le plus d’observation

client$CIVILITE[client$CIVILITE == "Mr" | client$CIVILITE == "monsieur"] <- "MONSIEUR"
client$CIVILITE[client$CIVILITE == "Mme" | client$CIVILITE == "madame"] <- "MADAME"

Le résultat est le suivant:



Nous constatons que la répartition homme/femme des clients est assez équitable


1.4- Gestion du format de dates


Au niveau des dates présentes dans les dataframes client et enteteTicket, nous avons dû transformer chacune de celles-ci dans un format de dates approprié.

Nous avons donc opté pour l’utilisation de la fonction parse_date_time du package lubridate permettant de garder la notion de la date ainsi que de l’heure. (time de la date)

to_date<- function(date){
  return(parse_date_time(x = date,
                         orders = c("dmY HMS", "Ymd HMS")))
}

date_func <- function(df){
  colnum <- grep("DATE", colnames(df))
  df[, (colnum) := lapply(.SD, to_date), .SDcols = colnum]
  return(df)
}

Cette notion de time pourra nous servir pour effectuer des études d’affluences par la suite (partie Datamining).


2- Étude globale


2.1- Distribution Adhérent / VIP…



Le pourcentage de CHURNER représente 1/3 des clients


2.2- Comportement du CA GLOBAL par client en 2016 et 2017



On se rend compte que sur le CA en 2016, il y a davantage de valeurs aberrantes que sur celui de 2017, avec un pic à plus de 48k€.


2.3- Distribrution age x customer


Prérequis : Nous avons choisi les clients agés entre 18 ans et 100 ans comme intervalle significatif pour notre étude



Pour chaque tranche d’âge, le nombre de client femme est supérieur au nombre de client homme.

L’écart est d’autant plus important entre 38 ans et 66 ans


3- Étude par magasin


3.1- Résultats par magasin


Objectif: construire un tableau (formattable) avec reprenant les données suivantes :

  • Les points de couleur noir correspondent aux clients situés à une distance comprise entre 0 et 5km du magasin
  • Les points de couleur rouge correspondent aux clients situés à une distance comprise entre 5 et 10km du magasin
  • Les points de couleur jaune correspondent aux clients situés à une distance comprise entre 10 et 20km du magasin
  • Les points de couleurs vert correspondent aux clients situés à une distance comprise entre 20 et 50km du magasin
  • Les points de couleurs noirs correspondent aux clients situés à une distance comprise entre 50km et plus du magasin

Le color_bar ne fontionnant pas correctement prennant en compte le total de tous les magasins (la derniére ligne), nous avons décidé de séparer en deux formattable.

MAGASIN NbClientsMag NbClientsActifs NbClientsActifs_N2 TOTAL_TTC_N2 NbClientsActifs_N1 TOTAL_TTC_N1 PctClientN2vsN1 Evol_TIC_TOTALTTC IndiceEvol
1 ALB 12828 13519 9717 2960492 10466 3049735 107.7 89243
2 ALM 16499 20466 14276 4036789 15577 4113500 109.1 76711
4 BAR 1321 1820 1331 455609 1486 511120 111.6 55511
6 BEC 7977 8932 6092 1470501 6683 1485816 109.7 15315
7 BLA 11748 11341 7592 2143925 8613 2255600 113.4 111675
8 BRE 10106 9494 6429 2089464 7539 2121890 117.3 32426
10 CAG 9071 12993 7955 1697422 8978 1792635 112.9 95213
14 DUM 6761 11770 8058 2208889 9279 2458297 115.2 249408
15 ECU 15410 21334 14485 4112227 15813 4274238 109.2 162011
16 EPN 8800 9321 6283 1748056 7123 1821401 113.4 73345
23 HAG 4780 6131 4028 801071 4653 848129 115.5 47058
25 IAB 16885 17617 11975 3222142 13749 3239041 114.8 16899
27 MAC 14632 15259 10776 2798360 11829 2821782 109.8 23422
30 MOB 18929 22724 16342 5977005 18240 6384418 111.6 407413
34 OBE 9709 10364 7552 1793099 8122 1796716 107.5 3617
40 PRI 26935 33621 22413 5528750 24231 5557473 108.1 28723
41 QUE 11699 15295 9924 1783723 11364 1898024 114.5 114301
43 RMA 6499 9442 4620 1108075 8182 2656634 177.1 1548559
44 SAL 3124 4091 2621 605825 3065 664169 116.9 58344
47 SEY 25967 27737 19712 4336407 21518 4400119 109.2 63712
49 SJV 11065 12707 8658 2254727 9430 2414626 108.9 159899
50 SLM 7894 7345 5448 1366816 5742 1431045 105.4 64229
52 SMR 12532 12943 9628 3044484 10005 3063415 103.9 18931
53 SNO 10828 15913 9927 2071763 12165 2292898 122.5 221135
54 SSM 23601 23057 16400 6413412 18358 6842403 111.9 428991
57 SUR 23784 21603 14926 4807772 15674 4966888 105.0 159116
58 THO 10549 11255 8111 2897265 8842 2979304 109.0 82039
63 VIC 11556 10923 7703 2114766 8455 2133379 109.8 18613
65 VIT 14673 16120 10930 3007212 12106 3089915 110.8 82703
66 VIV 3632 4435 3126 923416 3465 973409 110.8 49993
3 AVI 15435 16532 11904 4065940 12889 3951028 108.3 -114912
5 BEA 20714 19927 14792 5739924 16021 5566070 108.3 -173854
11 CLA 23744 22988 16444 5847742 17439 5639066 106.1 -208676
13 DIJ 12603 15333 10906 3043839 11524 2900306 105.7 -143533
18 FEG 10561 11878 8570 2347398 8741 2161776 102.0 -185622
19 FRV 15377 18859 13292 3922133 14205 3764134 106.9 -157999
20 GAI 16162 22318 16405 6143169 16478 5666501 100.4 -476668
21 GAP 8137 9133 6869 2080513 6997 1926181 101.9 -154332
22 GEX 19278 20013 15544 7388908 15865 6957686 102.1 -431222
24 HEI 23500 23181 16999 5834750 18558 5796841 109.2 -37909
26 LAB 11058 11067 7684 2053102 8448 2021050 109.9 -32052
29 MET 17997 25141 18161 4826410 18655 4633845 102.7 -192565
31 MOU 24389 23730 16780 6349088 18111 6045146 107.9 -303942
32 MUL 14240 13252 10105 3332191 10333 3172042 102.3 -160149
35 ORL 9891 9332 6981 2695003 7229 2467712 103.6 -227291
36 PEG 11012 10672 7778 2118864 8164 2044230 105.0 -74634
37 PEP 7609 6988 4912 1315595 4952 1225989 100.8 -89606
42 RAV 11396 13050 9425 2625701 9524 2302864 101.1 -322837
61 VEN 10544 15244 11411 3354293 11742 3182816 102.9 -171477
62 VIB 24640 28710 19105 4402350 20604 4323459 107.8 -78891
64 VIF 14180 14071 10052 2709179 10526 2586192 104.7 -122987
9 BSN 10302 9322 7137 2020922 6082 1665793 85.2 -355129
12 CLI 4454 4198 3297 918076 3072 794102 93.2 -123974
28 MAN 11343 11610 8905 2719688 8749 2461591 98.2 -258097
33 NEV 7007 13715 10268 1987412 9925 1769607 96.7 -217805
38 POC 10182 9095 6688 2406910 6658 2235014 99.6 -171896
39 PON 11788 14116 9882 2577363 9625 2363868 97.4 -213495
45 SCH 5526 5692 4555 979935 3530 624614 77.5 -355321
46 SEM 10360 9249 6875 1959365 6440 1781800 93.7 -177565
48 SGL 8846 9241 6682 1575548 6652 1450191 99.6 -125357
51 SMA 5413 6256 4783 1741264 4489 1490880 93.9 -250384
55 STE 12001 13059 9519 2526952 9388 2279578 98.6 -247374
56 STR 2946 4330 3101 670530 3048 642992 98.3 -27538
59 VAL 16685 16163 11995 3459988 11776 2986766 98.2 -473222
60 VAR 12948 15333 12025 3150352 11756 2701641 97.8 -448711
67 VLG 22541 27497 19855 6212516 19603 5653658 98.7 -558858
17 EST 1273 NA NA NA NA NA NA NA
MAGASIN NbClientsMag NbClientsActifs NbClientsActifs_N2 TOTAL_TTC_N2 NbClientsActifs_N1 TOTAL_TTC_N1 PctClientN2vsN1 Evol_TIC_TOTALTTC IndiceEvol
TOTAL 845876 939867 666724 196882377 708550 193575048 106.3 -3307329


3.2- Distance Client/Magasin


3.2.1- Calcul de distance à partir de données GPS (en KM)


Prérequis: Pour calculer la distance entre deux points GPS, il est obligatoire d’effectuer pour chaque coordonnée une conversion en radian.

deg2rad <- function(x){
  return(pi*x/180)
}

get_distance_m <- function(lat1, lng1, lat2, lng2) {
  earth_radius <- 6378.137; #Earth radius in km
  
  lon_a <- deg2rad(lng1);
  lat_a <- deg2rad(lat1);
  lon_b <- deg2rad(lng2);
  lat_b <- deg2rad(lat2);
  
  d = earth_radius * (pi/2 - asin( sin(lat_b) * sin(lat_a) + cos(lon_b - lon_a) * cos(lat_b) * cos(lat_a)))
  
  return (d)
}

Exemple:

get_distance_m(43.7235746425,-0.188266221507,48.8433156105,4.54286173009)

Résultat:

## [1] 675.9271


3.2.2- Aperçu graphique de la distance Client/Magasin par distance


Cet aperçu a été réalisé grâce à la librairie ggmap permettant de créer des maps statiques via Google Maps.

Exemple avec le magasin BAR:



  • Les points de couleur noir correspondent aux clients ayant une distance comprise entre 0 et 5km du magasin
  • Les points de couleur rouge correspondent aux clients ayant une distance comprise entre 5 et 10km du magasin
  • Les points de couleur jaune correspondent aux clients ayant une distance comprise entre 10 et 20km du magasin
  • Les points de couleurs vert correspondent aux clients ayant une distance comprise entre 20 et 50km du magasin
  • Les points de couleurs noirs correspondent aux clients ayant une distance comprise entre 50km et plus du magasin


4- Étude par univers


4.1- Étude par univers



L’histogramme nous montre que l’univers le plus important de la marque est l’univers U1 avec presque 80 millions de CA.

Pour chaque univers, la différence de CA entre ces deux années est faible.

Les univers U2 (environ 27 millions d’euros) et U3 (environ 35 millions d’euros) ont un CA sur l’année 2017 inférieur à celui de 2016.

L’écart le plus important se situe sur l’univers U3 où il y a un écart supérieur à 4M d’euros.

L’univers U0 est très faible avec environ 3 millions d’euros mais une bonne progression sur l’année 2017.

L’univers COUPON quant à lui apparait uniquement en 2016


4.2- Top par univers


CODEUNIVERS CODEFAMILLE MARGE_SORTIE rank
COUPON COUPON -910804.82
U0 160 5917722.98
U0 230 10700.63
U0 400 1030.55
U0 900 -12475.90
U1 020 17461174.60
U1 010 13094263.08
U1 080 10245218.21
U1 100 9370663.66
U1 060 8230891.96
U2 090 8140625.82
U2 070 7742154.86
U2 130 4425300.30
U2 210 568901.34
U3 120 25890826.74
U3 110 4300843.68
U4 220 12876658.43
U4 140 753928.02
U4 200 282383.97


Le seul top 5 apparaissant est sur l’univers U1 avec une marge de sortie assez conséquente au total. On peut en déduire que l’univers U1 est l’univers ayant la marge de sortie la plus importante.

La famille 120 de l’univers U3 détient la marge de sortie la plus élevée.