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 :
- heuristic_models (last_touch, first_touch, linear)
- markov_model (chaîne de Markov)
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.
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