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]