Classification de pages via le Machine Learning sur un univers de concurrence avec Python – I.

Recherche des k voisins

Cet article fait suite aux 3 articles précédents :

Dans ce nouvel article nous allons répéter ce que nous avons fait dans l’article précédent, mais cette fois, dans l’univers de concurrence du site de Networking-Morbihan.

Pour déterminer cet univers de concurrence, il nous faut trouver les compétiteurs qui se positionnent sur les mêmes mots clés que ceux de Networking Morbihan dans les résultats de recherche.

Pour obtenir cela, nous pourrions passer par l’API de SEMrush ou bien celle de Yooda qui nous permettent de récupérer des couples URLs/Positions pour des expressions données. Mais ceci à un certain coût.

Comme nous avons un nombre assez restreint de mots clés à tester (487 quand même) nous allons utiliser un scraper de SERPs développé en Python et qui devrait pouvoir suffire :

Googlesearch par Mario Vilas

Afin de pouvoir scraper Google nous allons utiliser la bibliothèque googlesearch qui a été développée par Mario Vilas. Le code source se trouve sur Github à l’adresse https://github.com/MarioVilas/googlesearch et la documentation à l’adresse https://python-googlesearch.readthedocs.io/en/latest/.

Cette bibliothèque fonctionne correctement, toutefois elle ne permet pas de paramétrer des proxies, ce qui vous oblige à paramétrer des temps de pauses importants pour éviter de vous faire jeter par Google.

Si vous connaissez un bibliothèque qui permet de paramétrer des proxies, n’hésitez pas à nous en faire part. Sinon, si j’ai un peu de temps je modifierais googlesearch dans le futur, pour la rendre exploitable dans un produit fini.

De quoi aurons nous besoin ?

Python Anaconda

Rendez vous sur la page de téléchargement d’Anaconda Distribution pour télécharger la version de Python Anaconda qui vous convient selon votre ordinateur.

Jeu de données

Nous partons du jeu de données dfGSC1-MAI.json créé lors de la phase précédente. Vous pouvez télécharger l’archive contenant ces données sur notre GitHub. Dézipper le fichier dans le répertoire qui contient votre programme source Python.

Code Source

Vous pouvez soit copier/coller les morceaux de codes ci-dessous, soit récupérer le code source en entier sur notre Github à l’adresse : https://github.com/Anakeyn/GSCCompetitorsMachineLearning1

Récupération des bibliothèques utiles et définition de la fonction TF*IDF

Ici nous ne présentons que la fonction utilisant la TfidfVectorizer de scikit-learn. Pour plus de détail sur la notion de TF*IDF, reportez vous à notre article précédent : Modèle Interne : test de classification de pages via le Machine Learning pour un seul site .

Récupération du jeu de données et préparation des expressions à scraper dans Google.

On enlève les requêtes en doublon pour éviter du scraping de SERPs inutiles.

Scrap des SERPs dans Google

Comme nous l’avons indiqué précédemment, cette opération peut durer un certain temps car nous sommes obligés de temporiser la lecture des pages de Google pour ne pas nous faire jeter.

Créations de variables explicatives

On va enrichir les données que l’on a pour créer de nouvelles variables explicatives pour créer un modèle de Machine Learning. on va créer les mêmes variables que précédemment dans le « modèle interne ».

Préparation des données pour le Machine Learning

Comme précédemment : On va préparer les données : déterminer les variables explicatives et la variable à expliquer et splitter le jeu de données en des données d’entrainement et des données de test.

Méthode des K-NN : k plus proches voisins

Pour plus d’explications sur l’algorithme k-NN reportez-vous à l’article précédent.

Recherche des k voisins
Recherche des k voisins

Le meilleur F1 score (en jaune) est obtenu avec k=1. Ce qui pourrai avoir tendance à sur optimiser par rapport aux données d’entrainement. k=2 pourrait aussi s’avérer intéressant.

N neighbor=1
Training set score: 0.941
Test set score: 0.7220
F1-Score : 0.8869

Distribution des pages dans les groupes

Distribution des Pages
Distribution des Pages

Modèles Linéaires

Comme précédemment, nous allons tester deux modèles linéaires : LogisticRegression et LinearSVC. Pour LogisticRegression nous ferons varier le paramère C.

Le meilleur F1 score est de 0.5910, ce qui est assez décevant. Il faudra enrichir les données et trouver de nouvelles variables explicatives pour avoir un modèle plus pertinent.

Importance des variables.

Même si le F1 Score est faible, regardons l’importance des variables pour la régression logistique avec C=1.

Importance des variables
Importance des variables

Comme on l’a vu, les modèles linéaires ne sont pas efficaces ici. Il conviendra dans un prochain article de déterminer de nouvelles variables explicatives.

A bientôt,

Pierre

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.