Introduction
Offisanté
Offisanté est une start-up jeune et dynamique spécialisée dans les analyses statistiques des données, dans l’aide à la décision et dans la transmission des informations. Créée en 2012, elle recueille aujourd’hui les données de plus de 1000 officines. Ces données sont analysées et mises à disposition pour le pilotage de la pharmacie par le pharmacien titulaire ; le pilotage du groupement auquel appartient la pharmacie ; le pilotage des campagnes marketing des laboratoires. Ces données concernent essentiellement les commandes, les ventes et les stocks de chaque officine. Offisanté propose aux groupements de pharmacies, ainsi qu’aux pharmacies individuelles, des conseils de gestion et de stratégies à adopter pour augmenter leurs marges. La plateforme Offisanté met à disposition un ensemble de tableaux de bords sur les principaux laboratoires fournisseurs selon les catégories de produits, sur les suivis de campagnes pour un produit spécifique, et bien d’autres domaines.
L’équipe d’Offisanté est constitué d’un président qui met en œuvre le développementcommercial de l’entreprise. Il fait la présentation, la négociation et la vente du service auprès des clients pharmaciens, groupement et laboratoires.
Son associé (mon maître de stage) assure le développement technique et statistique de la base de données.
La responsable du service clients s’occupe des relations entretenues avec les clients déjà inscrits ou en cours d’inscription. De plus, cette personne conçoit des tableaux de bilans utiles aux dirigeants de groupements de pharmacies et aux pharmaciens pour choisir quel produit acheter et où se fournir.
Deux chefs de projet assurent le développement informatique de l’entreprise. Un chef de projet travaille sur l’élaboration de tableaux de bords statistiques selon les besoin du pharmacien ou du groupement. L’autre chef de projet travaille quant à lui sur la gestion et l’organisation de la base de données.
Chaque pharmacie partenaire dispose dans son LGO (Logiciel de Gestion d’Officine) d’un extracteur de données, envoyant les données quotidiennement et automatiquement. Les trois principaux LGO sont LGPI, Winpharma et Alliadis
Data Quality sur le prix d’achat des produits
Les enjeux d’une bonne qualité des données sont très importants pour donner du sens aux traitements statistiques des données. Cette étude d’amélioration de data quality est primordiale pour la pertinence des analyses en essayant de redresser les valeurs extrêmement aberrantes autour de la moyenne ou de la médiane selon les types de produits. La valeur d’une entreprise comme Offisanté dépend de la qualité des données qu’elle fournit aux groupements et aux laboratoires. Plus les données sont fiables, plus l’entreprise gagne en valeur et en crédibilité auprès des clients. En effet, lors de l’élaboration d’un tableau de bord sur les marges d’une officine, les résultats sont complètement faussés si on tient compte d’un prix d’achat de plusieurs millions d’euros sur un produit ne valant en réalité que quelques euros. C’est pourquoi j’ai essayé de détecter les valeurs aberrantes pour ensuite les remplacer.
Tout au long de mon stage, j’ai donc travaillé sur l’amélioration de la data quality d’une table d’une base de données.
Tout d’abord, j’ai tenté de détecter les valeurs aberrantes sur les prix d’achats remisés des produits au sein des pharmacies. Ces erreurs peuvent provenir de plusieurs causes (erreurs de saisie des données de la part du pharmacien, mauvaise traduction depuis l’extracteur de données, …).
Dans un second temps, j’ai essayé de remplacer mes valeurs aberrantes par les valeurs les plus adéquates possibles selon les conditions que présente chaque ligne de commande comportant une valeur aberrante.
Enfin, j’ai automatisé ce processus pour qu’il soit affecté sur toutes les données rentrant chaque jour dans les bases d’Offisanté.
Détection des valeurs aberrantes
Méthode de détection calculatoire des valeurs aberrantes
Pour détecter les valeurs aberrantes au sein du jeu de données étudié, j’ai utilisé une méthode statistique simple basée sur l’étendue des prix d’achats remisés de chaque produit autour de la moyenne. Le prix d’achat remisé est le prix unitaire auquel les pharmaciens achètent un produit après un calcul éventuel suite à une offre promotionnelle faite par le fournisseur. En effet, le pharmacien bénéficie quelques fois d’unité(s) gratuite(s) lorsqu’il commande un produit.
J’ai donc effectué ces recherches dans la table répertoriant toutes les lignes de commandes de chaque pharmacie présente dans la base de données.
Pour optimiser la qualité des résultats, j’ai réduit mes recherches à toutes les commandes depuis le 1 er janvier 2013. Tout d’abord, j’ai calculé la moyenne ainsi que l’écart-type du prix d’achat remisé pour chaque produit étant répertorié dans cette table des lignes de commandes. J’ai fixé une valeur de rejet inférieure (respectivement une valeur de rejet supérieure) égale à Moyenne-3*Ecart-type (respectivement Moyenne+3*Ecart-type). Cela m’a permis d’extraire un nombre important de valeurs suspectes (plus d’un million soit 2% des lignes de commande étudiées). J’ai donc créé une nouvelle table en y introduisant toutes cesvaleurs aberrantes détectées.
En utilisant cette méthode, je me suis rendu compte que plusieurs pharmacies se trouvant dans cette nouvelle table se procuraient un bon nombre de produits à un prix plus élevé que la moyenne mais identique d’une pharmacie à une autre. En investiguant, j’ai appris que ces pharmacies se situaient toutes à la Réunion, ce qui expliquait ce prix supérieur à la moyenne.
J’ai donc tenu compte de cet élément important pour réévaluer ma table de valeurs aberrantes en distinguant bien les pharmacies se situant à la Réunion de celles se situant en France métropolitaine.
Ensuite, il m’a fallu introduire une nouvelle notion pour classer ces valeurs de façon plus ou moins aberrante. J’ai donc introduit quatre critères : ‘Très aberrant’, ‘Aberrant’, ‘Peu aberrant’ et ‘Non aberrant’. Pour déterminer immédiatement s’il s’agit d’une erreur de saisie de la part du pharmacien (la saisie d’un code à sept chiffres dans le champ du prix du produit entraine des erreurs considérables sur l’analyse des données) j’ai labellisé de ‘Très aberrantes’ toutes les valeurs étant au moins cinq fois supérieures à la moyenne ainsi que celles inférieures à un cinquième de la moyenne. Ensuite, j’ai qualifié de ‘Aberrantes‘ toutes les valeurs se situant entre deux et cinq fois la moyenne et celles se situant entre un cinquième et la moitié de la moyenne. De plus, j’ai qualifié de ‘Non aberrant’ toutes les lignes de commande ayant une quantité commandée égale aux UG (unités gratuites) admettant un prix d’achat remisé égal à 0 (ce qui ne présente aucun signe de valeur suspecte). Enfin j’ai nommé de ‘Peu aberrantes’ toutes les valeurs restantes.
De plus j’ai introduit une nouvelle variable appelée ‘Ecart’ calculant l’écart entre le prix d’achat et la moyenne du prix du produit.
Représentation graphique des résultats
Afin de visualiser les résultats que j’ai obtenus, j’ai utilisé le logiciel de Business Intelligence MicroStrategy.
Pour ce faire, j’ai créé une fonction SQL prenant en entrée deux variables : un identifiant de produit et la pharmacie associée présentant une valeur suspecte au sein des lignes de commande. Pour optimiser la rapidité d’exécution de cette requête, j’ai calculé pour le produit étudié le nombre de commandes par mois effectuées sur l’ensemble de toutes les pharmacies pour chaque prix d’achat. De plus j’ai calculé l’écart entre chaque prix et la moyenne du produit
Pour cet exemple, on va représenter les prix d’achats pour le produit 70935 pour toutes les pharmacies depuis le 1 er janvier 2013 et différencier les commandes de la pharmacie 263 des commandes des autres pharmacies grâce à la notion de flux.
Ensuite, j’ai pu exécuter cette requête dans l’interface de MicroStrategy. J’ai donc importé toutes les données utiles à la représentation graphique de la répartition du prix d’achat du produit.
Remplacement des valeurs aberrantes
Toutes les valeurs suspectes étant détectées, il faut maintenant élaborer une technique pour remplacer ces valeurs en suivant des règles bien précises selon les cas spécifiques de chaque ligne de commande. Par exemple, pour tous les produits ayant un taux de TVA égal à 2.1% (TVA correspondant aux médicaments) le prix d‘achat et le prix de vente sont fixés à l’échelle nationale. C’est pourquoi le redressement de la valeur aberrante se fera autour de la médiane du prix d’achat. Pour des produits dont le prix d’achat et de vente n’est pas fixé d’une pharmacie à une autre, le redressement s’effectuera plutôt autour de la moyenne du prix d’achat.
Algorithmes de remplacement des valeurs aberrantes
D’un autre côté, j’ai créé un script de remplacement pour chaque règle fixée. Pour la règle R0, règle qui s’applique dès que la quantité commandée est égale à l’UG et tous les produits ayant un taux de TVA différent de 2,1% (car les pharmaciens ne peuvent bénéficier d’UG sur les médicaments), j’ai décidé de remplacer toutes les valeurs aberrantes par 0.
Lorsque la pharmacie n’admet aucune ligne de commande sans valeur aberrante, je prends la moyenne sur la même période mais sur l’ensemble de la Réunion (règle 4). Je reprends donc le code ci-dessus en enlevant juste la condition V.id_pharmacie=A2.id_pharmacie dans la clause where de l’inner join où je calcule la moyenne.
Les règles 5 et 6 sont traitées de la même façon que les lignes 3 et 4 mais pour la France métropolitaine.
Enfin, les règles 7, 8, 9, 10 sont appliquées de la même manière que les règles précédentes mais sans que je tienne compte des UG (cas où UG=0 ou quantité_commandée<Ug ce qui n’a aucun sens).
J’ai inséré tous mes résultats dans une table. On obtient donc plusieurs valeurs de remplacement selon les règles pour chaque ligne de commande.
Ensuite, grâce à l’algorithme suivant, on choisit la valeur de remplacement en repérant le minimum de l’identifiant des règles affectées à chaque ligne de commande (les règles étant établies selon leur priorité). Ainsi on obtient une unique valeur de remplacement pour chaque ligne de commande.
Automatisation du processus de détection et de remplacement des valeurs aberrantes
Pour utiliser le travail de détection et de remplacement des valeurs aberrantes, j’ai automatisé le processus pour le mettre en application sur les données qui sont envoyées tous les jours par les officines. Cela représente un gain de temps et de qualité de données pour l’entreprise. Pour cela, j’ai utilisé le logiciel Microsoft Visual Studio.
J’ai donc créé un projet au format SSIS en suivant pas à pas les procédures décrites dans les parties précédentes.
Conclusion
Durant ces deux mois de stage, j’ai donc travaillé sur l’amélioration de la data quality d’une table d’une base de données présentant des valeurs aberrantes (environ 2% des données traitées). Détecter les valeurs aberrantes est inévitable si on veut effectuer des analyses statistiques solides et pertinentes.
J’ai donc établi un algorithme pour repérer ces valeurs aberrantes en me basant sur la répartition autour de la moyenne du prix d’achat des produits. J’ai récupérer toutes les données ne se trouvant pas dans l’intervalle [Moyenne – 3*Ecart-type ; Moyenne + 3*Ecarttype]. J’ai pu insérer toutes ces données dans une nouvelle table pour faciliter leur traitement.
Le travail de remplacement des valeurs aberrantes s’est avéré bien plus compliqué que la détection de ces valeurs. J’ai dû créer plusieurs scripts pour proposer des valeurs de remplacement de mes valeurs suspectes détectées selon les règles établies à partir des conditions fixées. Ensuite il a fallu choisir la valeur la plus appropriée selon les caractéristiques de la ligne de commande présentant l’anomalie.
Enfin j’ai pu automatiser ce travail de détection et de remplacement des valeurs aberrantes grâce au logiciel Microsoft Visual Studio. J’ai pu établir un plan d’exécution qui analyse et détecte les valeurs aberrantes et propose aussitôt une valeur de remplacement.
Cette automatisation permet l’exécution quotidienne de l’algorithme de détection et de remplacement sur les données rentrantes.
Tout au long de ce stage, j’ai donc appris à manipuler des bases de données pour améliorer la qualité des données. Grâce à ce travail de nettoyage, les analyses portées sur les marges des pharmacies et des groupements gagnent en valeur et en précision.
|
Table des matières
REMERCIEMENTS
INTRODUCTION
A – Offisanté
B – Data Quality sur le prix d’achat des produits
I. DETECTION DES VALEURS ABERRANTES
A – Méthode de détection calculatoire des valeurs aberrantes
B – Représentation graphique des résultats
II. REMPLACEMENT DES VALEURS ABERRANTES
A – Conditions sur les lignes de commandes
B – Règles mises en place
C – Algorithmes de remplacement des valeurs aberrantes
III. AUTOMATISATION DU PROCESSUS DE DETECTION ET DE REMPLACEMENT DES VALEURS ABERRANTES
CONCLUSION
TABLE DES MATIERES