SEO

OnCrawl: Machine Learning pour le SEO en 7 étapes


Cet article est le troisième d’une série sur l’utilisation de l’API d’OnCrawl. Nous avons déjà vu le package OnCrawlR qui s’appuie sur l’API d’OnCrawl et comment utiliser R pour construire une segmentation utilisable dans OnCrawl et basée sur plusieurs niveaux d’une URL.

C’est parti pour le Machine Learning (ML). Désormais, nous allons voir un script qui va beaucoup plus loin que tous mes précédents. En effet, l’utilisation d’un modèle de ML permet de trouver les variables d’importance qui impactent votre site mais je n’avais pas encore détaillé les méthodes pour les expliquer car souvent les modèles utilisés sont de véritable boîtes noires. Dans la partie 7 de cette article, vous allez donc découvrir la meilleure méthode pour le faire en R.

Mon objectif est d’identifier des facteurs d’importance qui déterminent un trafic SEO important et de les expliquer.

Installation des packages

Tous les packages pour faire fonctionner Xgboost peuvent être complexes à installer. Il s’agit de l’algorithme que nous allons utiliser pour l’entrainement de notre modèle. Voici la méthode étape par étape ; merci de bien respecter les majuscules et minuscules car ils sont sensibles à la casse. Il faut écrire chacune de ces lignes dans la console de R Studio :

install.packages("xgboost")
install.packages("pROC")
install.packages("ggplot2")
install.packages("caret")
install.packages("DALEX")

Une fois tout installé, vous venez de transformer votre Rstudio en une plateforme de data-science.

Etape 1 : Etude et préparation des données

Nous avons vu cette étape lors de l’article 1 que je vous invite à relire : Guide complet de l’API.

La récupération des données OnCrawl pour les logs et les crawls se fait en quelques lignes de code.

Etape 2 : Construction du Dataset

Nous allons donc utiliser les pages crawlées de mon premier article .

Ensuite, il faut déterminer le seuil à partir duquel les pages sont « superactives ». J’ai inventé cette définition car normalement, une page active est une page qui reçoit au moins une visite SEO sur une période donnée. Ici, j’utilise une médiane pour avoir autant de pages superactives que inactives et booster les résultats de l’étape d’entrainement. Donc je mets 1 si l’URL a plus de trafic que la médiane et 0 pour le reste.

threshold <- median(dataset$analytics_entrances_seo_google)
dataset$analytics_entrances_seo_google[which(is.na(dataset$analytics_entrances_seo_google))] <- 0
dataset$analytics_entrances_seo_google[which(dataset$analytics_entrances_seo_google <= threshold )] <- 0
dataset$analytics_entrances_seo_google[which(dataset$analytics_entrances_seo_google > threshold)] <- 1 

Etape 3 : Entrainement

L’étape d’entrainement est obligatoire pour utiliser l’algorithme. Nous allons entrainer notre modèle sur 75% des données et le tester sur les 25% restants pour éviter la sur-optimisation,  c’est un procédé très employé en Machine Learning.

smp_size <- floor(0.75 * nrow(dataset))
train_ind <- sample(seq_len(nrow(dataset)), size = smp_size)
X <- dataset[train_ind, ]
X_test <- dataset[-train_ind, ]
Y <- dataset[train_ind, "analytics_entrances_seo_google"]
y_test <-dataset[-train_ind, "analytics_entrances_seo_google"]

Désormais, nous avons un jeu d’entrainement nommé « X,y » et un jeu de test nommé « X_test, y_test »

Etape 4 : Utilisation de Xgboost

L’algorithme utilisé pour l’apprentissage se nomme Xgboost, c’est un diminutif pour eXtreme Gradient Boosting package.

Il se base sur les arbres d’apprentissage et la régression linéaire qui permet d’appliquer un facteur de boost sur les variables les plus importantes

Si vous souhaitez approfondir le sujet, c’est ici : https://github.com/dmlc/xgboost

Dans le dataset d’entrainement, je lui retire toutes les variables qui lui permettent de construire un arbre de décision trop simple. En effet, si vous laissez les variables « _entrances_seo_google » ( les variables concernant le trafic ), il basera l’intégralité des arbres de décision sur cette variable.

# wt = without target
X_wt <- select(X,
                -analytics_entrances_seo_google
               ,-contains("ati_entrances_seo_google ")
               ,-contains("google_analytics_entrances_seo_google")
               ,-contains("adobe_analytics_entrances_seo_google")
  ) 

Ensuite, vous allez pouvoir l’utiliser la fonction Xgboost. J’explique ensuite le détail de chacun de ses arguments.

model <- xgboost(data = data.matrix(X_wt),label = data.matrix(y), eta = 0.1,max_depth = 10,verbose=1,nround = 400,objective =
"binary:logistic",nthread = 8)

Précision
data : il s’agit de notre dataset
label : si l’URL est crawlée plus que notre moyenne, on met le label à 1 sinon 0.
eta : échantillon que l’on conserve après chaque itération pour éviter la sur-optimisation
nround : nombre d’itérations que l’algorithme doit accomplir
max_depth : il s’agit de la profondeur maximal de l’arbre d’apprentissage (ici : 10)
objective = binary:logistic : Nous indiquons à l’algorithme que nous travaillons avec la régression logistique pour faire une classification binaire (assez crawlée ou pas assez crawlée)

Etape 5 : Résultats

Nous générons la matrice de confusion suivante qui permet de compter les résultats bien classés et les résultats mal classés, l’objectif est d’avoir le minimum de résultats mal classés :

y_pred <- predict(model, data.matrix(X_test_wt))
confusionMatrix(as.factor(round(y_pred)), as.factor(y_test))
matrice de confusion

Les résultats restent relativement corrects avec une efficacité de 89 %.
Nous allons décrypter cette matrice.

Dans nos formations DATA SEO LABS, nous avons remarqué qu’il est facile de comprendre les vrais positifs et les vrais négatifs mais il est compliqué de comprendre les faux négatifs et le faux positifs.

Avec du recul, c’est un souci de traduction quand vous lisez faux négatifs, il faut lire : Prédit négatif mais faux.
Si vous lisez faux positifs, il faut donc lire : Prédit positif mais faux

Ainsi, il devient facile de bien placer ces différents chiffres et de calculer le taux de précision.

Soit Accuracy = (TN + TP ) / ( TN + FN + FP + TP ) = 694 / 782 = 0,88746

Question bonus : combien faut-il d’URLs pour avoir un résultat correct ?
Après quelques essais, j’ai obtenu de bons résultats avec au moins 500 URLs. Il faut juste s’assurer que les pages sont crawlées de façon régulière par le Googlebot.

Etape 6 : Automatisons un peu

Voici la ligne pour refaire les étapes 2,3,4 et 5 en une ligne de code :

list <- oncrawlTrainModel(datasetMatAll)

Dans les paramètres, vous pouvez aussi passer le nombre d’itérations que l’algorithme doit accomplir par défaut, il est à 400. La fonction retourne la matrice de confusion et la courbe de ROC pour mesurer la fiabilité des résultats.

Maintenant, nous arrivons sur l’étape 7 où nous allons pouvoir comprendre et utiliser les résultats.

Etape 7 : DALEX : Descriptive mAchine Learning EXplanations

Je suis fan de DALEX: Descriptive mAchine Learning EXplanations pour comprendre des modèles de ML. Le nom est inspiré d’un méchant récurrent du Doctor Who qui passe son temps à dire : Explain ! https://www.youtube.com/watch?v=JYqjcHYTQgQ

Descriptive mAchine Learning EXplanations
DALEX

En effet, les modèles deviennent de plus en plus sophistiqués en raison de la puissance de calcul croissante des ordinateurs et de la complexité des sources de données.

Qu’on prenne XgBoost ou les réseaux de neurones, ils sont paramétrés avec des milliers voire des millions de possibilités.

Il est difficile de comprendre le lien entre les variables d’entrée et les résultats du modèle, c’est ce qu’on appelle des black-box ou boîtes noires en français. Ces modèles de ML sont utilisés en raison de leur haute performance, mais leur manque d’interprétabilité reste l’un de leurs plus gros points faibles.

Malheureusement pour le SEO, nous avons besoin de connaître l’impact de chaque variable sur les prévisions finales du modèle.

C’est là qu’intervient le package DALEX : https://pbiecek.github.io/DALEX_docs/

Ce package permet de comprendre un très grand nombre de modèles de ML.

Utilisons DALEX

Les modèles « boîte-noire » de Machine Learning peuvent avoir des structures très différentes. Cette fonction crée une représentation unifiée d’un modèle, qui sera utilisée pour expliquer les différents facteurs d’importance.

library("DALEX")
explainer_xgb <- explain(model, data = data.matrix(X_wt), y = data.matrix(y), label = "xgboost") explainer_xgb

Voilà, votre modèle est prêt à être à être expliqué.

Observons désormais les facteurs d’importance pour ce dataset

La fonction « variable_importance » permet de lister les variables qui ont une influence importante sur le résultat.

vd_xgb <- variable_importance(explainer_xgb, type = "raw")

plot(vd_xgb)

explainer_xgb : le modèle à expliquer par la fonction explain
loss_function : une fonction que l’on utilisera pour évaluer les variables d’importance.
type : le type de transformation utilisé pour le dropout.

Exemple

Voici ce que nous obtenons avec les données OnCrawl . En fait, le package DALEX va créer des perturbations importantes sur les variables d’entrée et observer les résultats en sortie en classant par ordre d’impacts.

Expliquons les variables les plus importantes

Il existe ensuite la fonction « single_variable » qui calcule la réponse moyenne du modèle en fonction d’une seule variable sélectionnée. Désormais le package DALEX va faire varier ce paramètre d’entrée pour voir si la prédiction augmente ou baisse la page à être « superactive ».

sv_xgb_satisfaction_level  < single_variable(explainer_xgb,variable = "inrank_decimal ",type = "pdp")
plot(sv_xgb_satisfaction_level)

explainer_xgb : le modèle à expliquer
type :  le package DALEX utilise le ‘pdp’ package (Partial Dependency and Accumulated Local Effects) pour expliquer notamment les variables numériques.

Pour le Inrank (ou page rank interne), nous avons donc le graphique suivant mais vous avez aussi le tableau avec tous les valeurs remarquables. Par exemple, ici nous comprenons que les pages qui ont un Inrank inférieur à 6 passe d’une prédiction de 0.3 à 0.15 d’où l’importance d’un bon maillage interne.

explainer one variable

Pour les utilisateurs du package R oncrawlR

Tout peut se faire en 2 lignes de code !

list <- oncrawlTrainModel(datasetMatAll,500)
oncrawlExplainModel(list$model, list$x, list$y, 8)

Ensuite, vous pouvez visualiser et exporter les seuils et les images grâce à l’onglet Visualisation de R Studio. Vous avez des boutons pour faire défiler les graphiques et un bouton pour les exporter dans vos audits ou slides SEO. Le paramètre 8 dans la fonction oncrawlExplainModel permet simplement d’indiquer combien de variables d’importance, vous souhaitez détailler.

Mission accomplie

Désormais, vous avez déterminé les principales variables d’importance pour votre site et vous avez les seuils à viser pour influencer votre trafic SEO. Attention, chaque site aura des variables d’importance et des seuils différents, nous sommes vraiment sur une approche sur-mesure mais surtout sur une approche scientifique. Si l’accuracy est élevé, vous pouvez garantir les résultats.

La prochaine étape sera dédiée à la création automatique d’un audit SEO au format PowerPoint bien présenté et qui respecte vos polices d’écriture et logo. Ce rapport va reprendre des graphiques de OnCrawl sur la période de votre choix mais surtout intégrer les variables d’importance et les seuils à travailler en priorité. Il vous restera donc à mettre vos commentaires pour passer plus de temps sur le suivi, l’analyse et la stratégie plutôt que la collecte et la préparation des données.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *