Cet exemple est inspiré de Kaelin Harmon de LunaMetrics.

library(ChannelAttribution)
library(ggplot2)
library(reshape)
set.seed(1234)

Commençons par charger nos données.

data <- read.csv("C:/sb-waq/R/ChannelAttribution/ca.csv")
head(data)
##           MCF.Channel.Grouping.Path Conversions Conversion.Value
## 1                            Direct         538              538
## 2                     OrganicSearch         341              341
## 3                   Direct > Direct         260              260
## 4          Direct > Direct > Direct         147              147
## 5            OrganicSearch > Direct          91               91
## 6 Direct > Direct > Direct > Direct          84               84

Nous allons utiliser 2 fonctions du package ChannelAttribution :

H <- heuristic_models(data, 'MCF.Channel.Grouping.Path', 'Conversions')
M <- markov_model(data, "MCF.Channel.Grouping.Path", "Conversions", order=4, max_step=10)
R <- merge(H, M, by='channel_name') # Merger le résultats des 2 fonctions.

Renommer les colonnes et formater les données pour la visualisation.

colnames(R) <- c('channel_name', 'first', 'last', 'linear', 'markov') 
R <- melt(R, id='channel_name')
names(R)[2] <- "Modeles"

Visualiser les divers modèles.

R <- R[order(-R$value), ]
ggplot(R, aes(channel_name, value, fill = Modeles)) +
  geom_bar(stat='identity', position='dodge') +
  ggtitle("Comparaison des modèles d'attribution") + 
  theme(axis.title.x = element_text(vjust = -2)) +
  theme(axis.title.y = element_text(vjust = +2)) +
  theme(title = element_text(size = 16)) +
  theme(plot.title=element_text(size = 20)) +
  ylab("")

cast(R, channel_name ~ Modeles)
##       channel_name first last      linear     markov
## 1    (unavailable)    43  106   68.692954  220.18083
## 2           Direct  2569 2424 2613.884171 1790.85272
## 3          Display    31    5   26.600735   93.21692
## 4            Email     9    2    7.800369   45.15059
## 5    OrganicSearch   693  733  597.911868  912.13646
## 6 OtherAdvertising    22   35   23.846330   40.20671
## 7       PaidSearch   134  176  147.833194  291.40644
## 8         Referral    15   35   29.057786  114.31432
## 9    SocialNetwork     2    2    2.372594   10.53500

Les chaines de Markov peuvent servir à d’autre chose qu’effectuer des analyses d’attribution de canaux. En fait, n’importe quelles séquences peuvent être analysées. Par exemple, l’analyse de parcours des pages consultées pour les visites durant lesquelles une conversion spécifique a été réalisée.

options(width = 1400)

data <- read.csv("C:/sb-waq/R/ChannelAttribution/sequences_pages.csv")
H <- heuristic_models(data, 'Sequence', 'Conversions')
M <- markov_model(data, "Sequence", "Conversions", order=4, max_step=10)
R <- merge(H, M, by='channel_name') # Merger le résultats des 2 fonctions.
colnames(R) <- c('pages', 'first', 'last', 'linear', 'markov') 
R <- melt(R, id='pages')
names(R)[2] <- "Modeles"
S <- cast(R, pages ~ Modeles)
S <- head(S[order(-S$markov), ], 10)
print(S, row.names = FALSE)
##                                                                               pages first last    linear    markov
##                                      /fr/votre_caisse/accueil.jsp?transit=xxx-xxxxx   883  942 826.77311 241.74059
##                                        /sommaire-perso/sommaire/detention/index.jsp   537    6 250.22836 216.87126
##                                                                          /index.jsp   576   10 158.52803 177.59566
##                                  /particuliers/prets-marges-cartes-credit/index.jsp     6    0  66.62473  83.32405
##                                                             /particuliers/index.jsp   127    1  74.98731  82.40342
##                                       /sommaire-perso/sommaire/EOP/detail/index.jsp     1    4  39.86186  74.27351
##                    /particuliers/prets-marges-cartes-credit/marges-credit/index.jsp    57  142  82.92577  64.31135
##                 /particuliers/prets-marges-cartes-credit/prets-personnels/index.jsp    33  128  58.77355  56.44049
##  /particuliers/prets-marges-cartes-credit/marges-credit/marge-personnelle/index.jsp    17  177  57.71558  52.77682
##                                                     /adp/Marge_de_credit//index.jsp     0  176  40.25573  43.41885

Nous pouvons même utiliser cette méthode pour prédire quelle sera la prochaine page qui sera visitée par un visiteur et la précharger afin d’accélérer l’expérience utilisateur.