Business Intelligence : targeting customers marketing
Transcription
Business Intelligence : targeting customers marketing
Université de Caen Normandie 1 28 janvier 2017 Dpt. Mathématiques et Informatique Améliorer les ventes en période creuse Sommaire 1.1 1.2 1.3 1.4 1.5 1.6 1.1 Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Description . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Table customer . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2 Table order . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3 Table product . . . . . . . . . . . . . . . . . . . . . . . . 1.2.4 Table time . . . . . . . . . . . . . . . . . . . . . . . . . . Environnement de travail . . . . . . . . . . . . . . . . . . . Etude du chiffre d’affaires par années et mois . . . . . . Base d’apprentissage . . . . . . . . . . . . . . . . . . . . . 1.5.1 Bases d’apprentissage et tests . . . . . . . . . . . . . . . . 1.5.2 Préparation de la table WORK.BASE . . . . . . . . . . . . . 1.5.3 Table des chiffres d’affaires par client WORK.CLIENT . . . . 1.5.4 Table des chiffres d’affaires par client WORK.PRODUIT . . . 1.5.5 Table des chiffres d’affaires par mois et année WORK.MOIS, 1.5.6 Table des récences et ancienneté WORK.RECENCE . . . . . . 1.5.7 Table de la variable cible WORK.TARGET . . . . . . . . . . . 1.5.8 Table d’apprentissage WORK.FIN . . . . . . . . . . . . . . . Modélisation de la variable cible TARGET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . WORK.ANNEE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 2 2 2 2 3 4 4 4 4 4 5 5 5 6 6 Objectifs Il s’agit de trouver des leviers pour augmenter les ventes d’une société pendant la période creuse. — Apprendre à utiliser SAS Enterprise Guide. — Aggréger des paramètres clients : récence, fréquence et valeur de ses achats,... — Modéliser le profil des clients achetant en février mars à l’aide de paramètres clients. — Prédire la probabilité d’achat en période creuse de clients à l’aide du modèle. — Lancer une campagne de marketing sur ces clients. 1.2 Description Cette base de données fictive Orion Star Sports & Outdoors m’a été fournie par Grégoire de Lassence de la société SAS comme exemple de data-mining proposé dans le cadre de la licence SAS Enterprise-Miner que les départements de mathématiques et d’informatique avaient pu obtenir pendant une année. Cette base de données sert aussi comme exemples de dépots de données (data Warehouse). 1.2.1 Table customer 1 2 3 4 5 6 7 8 9 10 11 nom Customer Customer Customer Customer Customer Customer Customer Customer ID Country Gender Name FirstName LastName BirthDate Age Group type quanti quali quali quali quali quali quanti quali label Customer ID Customer Customer Customer Customer Customer Name First Name Last Name Birth Date Age Group modalites ... Female ;Male ... ... ... 15-30 years ;31-45 years ;46-60 years ;61-75 years Customer Type quali Customer Type Name Orion Club Gold members high activity ;Orion Club Gold members low activity quali Customer Group Name Orion Club Gold members Customer Group Customer Age quanti Customer Age age en 2003 ou 2004(fk) ? Table 1: Catalogue des variables de la table customer http://www.math.unicaen.fr/~kauffmann/cours 1 [email protected] Université de Caen Normandie Customer ID 1 13 19 21 45 49 28 janvier 2017 Customer Country France Germany Germany Spain United States United States Customer Gender Male Male Male Male Female Female Customer Name Albert Collet Markus Sepke Oliver S. FüSSling José Fernández de Mesa Dianne Patchin Annmarie Leveille Customer FirstName Albert Markus Oliver S. José Dianne Annmarie Dpt. Mathématiques et Informatique Customer LastName Collet Sepke FüSSling Fernández de Mesa Patchin Leveille Customer BirthDate -6977.00 8968.00 53.00 -1660.00 5604.00 7502.00 Table 2 – Premières lignes des 10 premières colonnes de la table customer 1.2.2 Table order 1 2 3 4 5 6 7 8 9 10 11 12 1.2.3 nom Customer ID Employee ID Street ID Order Date Delivery Date Order ID Order Type Product ID Quantity Total Retail Price CostPrice Per Unit Discount 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 modalites Table product 1 2 3 4 5 6 7 8 1.2.4 type label quanti Customer ID quanti Employee ID quanti Street ID quanti Date Order was placed by Customer quanti Date Order was Delivered quanti Order ID quanti Order Type quanti Product ID quanti Quantity Ordered quanti Total Retail Price for This Product quanti Cost Price Per Unit quanti Discount in percent of Normal Total Retail Price Table 3: Catalogue de la table order nom Product Product Product Product Product Supplier Supplier Supplier ID Line Category Group Name Country Name ID Table type label modalites quanti Product ID quali Product Line Clothes & Shoes quali Product Category Clothes ;Shoes quali Product Group ... quali Product Name ... quali Product Name ... quali Supplier Name ... quanti Supplier ID 4: Catalogue de la table order Table time nom Order Date Year ID Quarter Month Name Week Name Weekday Name Month Num Week Num Weekday Num Weekday EU Fiscal Year Fiscal Quarter Fiscal Month Num Holiday US Holiday DK WeekDay DK Month DK type quanti quanti quanti quanti quanti quanti label Date Year Quarter Month Name Week Name in display format (YYYY-WW) Weekday Name Month Number European Week Number US WeekDay Number European Weekday Number Fiscal Year Fiscal Quarter Fiscal Month Number USA Holidays Danish Holidays Danish Weekdays Danish Month Names http://www.math.unicaen.fr/~kauffmann/cours 2 modalites [email protected] Université de Caen Normandie 28 janvier 2017 Dpt. Mathématiques et Informatique Table 5: Catalogue de la table time 1.3 Environnement de travail 1. Créer un répertoire de travail orion dans votre espace de travail et un sous répertoire orion/data. 2. Télécharger le fichier http://www.math.unicaen.fr/~kauffmann/data/orion-data.zip, décompresser ce fichier dans le répertoire data. 1.4 Etude du chiffre d’affaires par années et mois Dans cette question, on veut calculer le chiffre d’affaire total par année et mois à l’aide de la table order_fact et construire le graphe du chiffre d’affaire en fonction du temps exprimé en années. 1. Ouvrir l’application Sas Enterprise Guide 2. Créer un nouveau projet orion-start dans votre répertoire de travail orion. Choisir l’option ”chemins relatifs” de Fichier/Propriétés du projet/Références de fichiers. 3. Faire glisser le fichier orion/data/order_fact.sas7bdat depuis l’explorateur Windows jusque dans la fenêtre de flux de processus, puis ouvrir cette table. 4. Ajouter un nouveau noeud de calcul Générateur de requ^ etes. On va créer deux nouvelles colonnes calculées quantitatives, l’année et le mois calculées à partir de la variable Order_Date, date de la commande. (a) Selectionner le menu Colonnes calculées, puis Nouvelle, puis expression avancée, puis Suivant. Tappez alors dans la fenêtre YEAR(t1.Order_Date) appeler cette variable ANNEE. (b) Créer de même la variable MOIS valant le numéro du mois entre 1 et 12 de la date de la commande. (c) Ajouter dans la table de sortie la colonne Total_Retail_Price. (d) Faire exécuter. 5. A partir de cette table faire excécuter un noeud de calcul Statistiques descriptives ou l’on calculera la moyenne d’un achat par mois. 6. Dans cette question, on calcule la somme des commandes par années et par mois à l’aide d’une requête. (a) Ouvrir la table de sortie de la requête précédente et ouvrir le menu Générateur de requ^ etes (b) Selectionner les variables MOIS, ANNEE dans la table de sortie, (c) Ajouter une nouvelle colonne de type agrégée nommée total. L’agrégation proposée se fera par MOIS, ANNEE et la fonction utilisée sera la somme. (d) Ajouter une nouvelle colonne calculée DAT EN = AN N EE + M OIS/12 (e) Trier les données par ANNEE et MOIS. (f) Quels sont les mois ou l’entreprise réalise sont plus petit chiffre d’affaire ? 7. A partir de a table de sortie de cette requête faite la représentation graphique suivante (obtenue ici avec R) http://www.math.unicaen.fr/~kauffmann/cours 3 [email protected] Université de Caen Normandie 28 janvier 2017 Dpt. Mathématiques et Informatique 0e+00 1e+05 2e+05 x 3e+05 4e+05 total retail 1998 1999 2000 2001 2002 2003 t Figure 1 – Evolution du chiffre d’affaire 1.5 1.5.1 Base d’apprentissage Bases d’apprentissage et tests La base d’apprentissage sera composée des informations clients personnelles et des informations clients achats entre 1 janvier 98 et le 31 décembre 2001. La variable cible sera est ce que le client a acheté entre le premier février 2002 et le 30 avril 2002. La base de test sera composée de la même façon mais décalée de 1 an. La variable cible sera ”est ce que le client a acheté en février 2003 ou mars 2003”?. 1.5.2 Préparation de la table WORK.BASE Dans cette question on va fusionner les tables et ne sélectionner que les opérations dont les dates de commandes sont inférieures au 31 décembre 2001. 1. Selectionner la table order_fact et ajouter une requete Filtre et Requ^ ete. 2. Sélectionner Ajouter des tables puis ajouter les 3 autres tables. Comment se fait la jointure de ces quatres tables ? 3. Selectionner les données en poussant les variables suivantes dans la colonne résultat Sélectionner les données à droite. ORDER_FACT.Customer_ID CUSTOMER_DIM.Customer_Country CUSTOMER_DIM.Customer_Gender CUSTOMER_DIM.Customer_BirthDate PRODUCT_DIM.Product_Group TIME_DIM.Month_Name TIME_DIM.Year_ID ORDER_FACT.Order_Date ORDER_FACT.Total_Retail_Price ORDER_FACT.CostPrice_Per_Unit ORDER_FACT.Discount ORDER_FACT.Quantity 4. Ajouter une colonne calculée nommée age de label age au 31 décembre 2001 calcul l’age du client au 31 décembre 2001 à l’aide des fonctions dates proposées : 2002-year(Table.Customer_BirthDate). 5. Depuis l’onglet Filtrer les données sélectionner la variable ORDER_DATE.ORDER_FACT puis modifier le filtre en ne conservant que les observations ayant une date de commande inférieure ou égale au 31 décembre 2012. Dans Sas on peut utiliser la chaine ’31Dec2001’d. On peut aussi entrer 15340 qui est le nombre de jours compris entre le 1 janvier 1960 (origine des temps SAS) et le 31 décembre 2001. ORDER_DATE.ORDER_FACT Inférieur ou égal ’31Dec2001’d 6. Depuis l’onglet Trier les données, trier les données par CUSTOMER_ID puis par ORDER_DATE. http://www.math.unicaen.fr/~kauffmann/cours 4 [email protected] Université de Caen Normandie 28 janvier 2017 Dpt. Mathématiques et Informatique 7. Renommer la table de sortie en WORK.BASE (nom de la sortie en haut à droite). 8. Excécuter la requête, voir le code SQL généré. 1.5.3 Table des chiffres d’affaires par client WORK.CLIENT A l’aide d’une requête sur la table WORK.BASE, calculer les valeurs moyenne, maximum, nombre de commandes de la variable TOTAL_RETAIL_PRICE ainsi que les valeurs maximum et moyenne de la variable DISCOUNT. La table de sortie s’appelera WORK.CLIENT. 1.5.4 Table des chiffres d’affaires par client WORK.PRODUIT Dans cette question on veut étudier le chiffre d’affaires par produit et par client. 1. Créer une requête à partir de la table WORK.BASE et copiant les variables Customer_ID, Product_Group et en créant une nouvelle colonne agrégée somme de la variable TOTAL_RETAIL_PRICE. La case groupes agrégés automatiquement doit être sélectionnée par défaut, on calcule l’agrégation par BASE.Customer_ID et BASE.Product_Group. On trie les données de sorties en numéro de client puis en groupe de produit grâce à l’onglet Trier les données. 2. On veut maintenant créer une table ou les lignes seront des clients et ou les colonnes seront les chiffres d’affaires réalisés pour un client par groupe de produit. On va utiliser le menu transposer. (a) Dans l’onglet Fonctions de la t^ ache, définir les options suivantes : Transposer les variables SUM_OF_TOTAL_RETAIL_PRICE Nouvaux noms de colonnes Product_Group Grouper l’analyse par Customer_ID (b) Dans l’onglet options Déselectionner l’option préfixe du nom de la colonne. (c) Dans l’onglet Résultats Définir la table de sortie en Local: WORK.PRODUIT 1.5.5 Table des chiffres d’affaires par mois et année WORK.MOIS, WORK.ANNEE 1. Dans cette question on calcule le chiffre d’affaires pour chacun des clients par mois. Les lignes de cette table sont les clients et les colonnes seront les moids de l’année August,..., September. Reprendre la question précédente : requête et transposition en changeant BASE.Product_Group par BASE.Month_NAME. La table de sortie s’appelera WORK.MOIS. 2. Dans cette question on calcul du chiffre d’affaire par année et par client. Les lignes de cette table seront les clients et les colonnes les années 1998,1999, 2000, 2001. Reprendre la question précédente en changeant Product_Group en Year_ID. La table de sortie s’appelera WORK.ANNEE. 1.5.6 Table des récences et ancienneté WORK.RECENCE Dans cette question on calcule pour chaque client la récence la durée entre le dernier achat et la date de réference ici 31 décembre 2001. l’ancienneté la durée entre le premier achat et la date de référence. Depuis la fenêtre flux de processus en cliquant à droite sur la souris, créer un nouveau programme data work.recence; retain anciennete; set work.base; by customer_id; if first.customer_id then anciennete=yrdif(order_date,'31Dec2001'd); if last.customer_id then do; recence =yrdif(order_date,'31Dec2001'd); output; end; run; Les variables logiques first.customer respectivement last.customer indiquent quand l’observation courante est la première respectivement la dernière des achats d’un client. On pourra consulter How the DATA Step Identifies BY Groups. La table WORK.BASE doit être triée par ORDER_DATE pour que le premier achat d’un client soit le plus ancien et le dernier achat d’un client soit le plus récent. 1. Renommer ce programme recence 2. Lier ce programme à la table WORK.BASE 3. Faire exécuter ce programme. http://www.math.unicaen.fr/~kauffmann/cours 5 [email protected] Université de Caen Normandie 1.5.7 28 janvier 2017 Dpt. Mathématiques et Informatique Table de la variable cible WORK.TARGET Dans cette question on veut savoir si un client a effectué un achat entre le 1 février 2002 et le 30 avril 2002. Cela sera notre variable cible à expliquer. A l’aide d’une requête sur ta table ORDER_FACT 1. Créez une nouvelle colonne calculée de type expression avancée qui vaut 1 si un achat d’un client a été effectué un achat entre le 1 février 2002 et le 30 avril 2002. Cette variable ne doit pas apparaitre dans les variables de sorties, elle est temporaire. ('01FEB2002'd <= t1.Order_DATE ) and (t1.Order_DATE <= '30APR2002'd) 2. Sélectionner la variable CUSTOMER_ID dans les variables de sorties 3. Créer une nouvelle variable agrégée par défaut avec la variable CUSTOMER_ID. 4. Créez une nouvelle variable agrégée par CUSTOMER_ID à l’aide de la fonction SUM (DISTINCT()) à partir de la variable calculée précédemment. 5. La table de sortie s’appelera WORK.TARGET. 1.5.8 Table d’apprentissage WORK.FIN 1. A l’aide d’une requête sur la table WORK.CLIENT faire la jointure des tables CLIENT, TARGET, PRODUIT, MOIS,RECENCE, ANNEE. Copier alors toutes les variables en variables de sortie. La table résultat devra s’appeler WORK.OUT. Si il n’y a pas d’erreurs il n’y a qu’une seule ligne par identifiant client. 2. A l’aide d’une étape de calcul on veut remplacer les valeurs manquantes des variables numériques par 0 et les valeurs manquantes des variables charactères par la chaine ’NA’. data fin; set work.out; array x(*) _numeric_; array y(*) _character_; do i=1 to dim(x); if missing(x(i)) then x(i)=0; end; do i=1 to dim(y); if missing(y(i)) then y(i)='NA'; end; drop i j; run; Connecter ta table WORK.OUT à ce programme. 3. Depuis le tableau du flux de processus exporter la table WORK.FIN. Cette table pourra être utilisée directement dans R. 1.6 Modélisation de la variable cible TARGET 1. Téléchargez la base http://www.math.unicaen.fr/~kauffmann/data/orion-apprentissage.zip 2. Construire des modèles expliquant la variable cible TARGET : régression logistique, arbre de décision, ... à l’aide de la base d’apprentissage. 3. Calculer la base de test, tester vos modèles sur la base de test. 4. Comparer vos modèles : Courbe de Lift , AUC, ... 5. Proposer au maximum deux modèles. Expliquer et discuter votre choix, votre modèle, vos résultats, les données. 6. On pourra choisir un cout sur les frais de marketing par client, calculer un chiffre d’affaire moyen par client. En déduire la liste des clients à relancer, le retour sur invetissement moyen devra être positif. http://www.math.unicaen.fr/~kauffmann/cours 6 [email protected]