Regroupement des visiteurs uniques par useragent, ip, session_id

15

Étant donné les données d'accès au site Web sous la forme session_id, ip, user_agent, et éventuellement l'horodatage, en suivant les conditions ci-dessous, comment regrouperiez-vous au mieux les sessions en visiteurs uniques?

session_id: est un identifiant donné à chaque nouveau visiteur. Il n'expire pas, mais si l'utilisateur n'accepte pas les cookies / efface les cookies / change de navigateur / change d'appareil, il ne sera plus reconnu

IP peuvent être partagés entre différents utilisateurs (Imaginez un café wi-fi gratuit ou votre FAI réaffectant des IP), et ils en auront souvent au moins 2, à la maison et au travail.

User_agentest la version navigateur + OS, permettant de distinguer les appareils. Par exemple, un utilisateur est susceptible d'utiliser à la fois un téléphone et un ordinateur portable, mais il est peu probable qu'il utilise des ordinateurs portables Windows + Apple. Il est peu probable que le même identifiant de session ait plusieurs agents utilisateurs.

Les données peuvent ressembler au violon ici: http://sqlfiddle.com/#!2/c4de40/1

Bien sûr, nous parlons d'hypothèses, mais il s'agit de se rapprocher le plus possible de la réalité. Par exemple, si nous rencontrons le même ip et useragent dans un laps de temps limité avec un session_id différent, ce serait une supposition juste qu'il s'agit du même utilisateur, à quelques exceptions près.

Edit: La langue dans laquelle le problème est résolu est irellevant, il s'agit principalement de logique et non d'implémentation. Le pseudocode est très bien.

Edit: en raison de la nature lente du violon, vous pouvez également lire / exécuter le mysql:

select session_id, floor(rand()*256*256*256*256) as ip_num , floor(rand()*1000) as user_agent_id
from 
    (select 1+a.nr+10*b.nr as session_id, ceil(rand()*3) as nr
    from
        (select 1 as nr union all select 2 union all select 3   union all select 4 union all select 5
        union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)a
    join
        (select 1 as nr union all select 2 union all select 3   union all select 4 union all select 5
        union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)b
        order by 1
    )d
inner join
    (select 1 as nr union all select 2 union all select 3   union all select 4 union all select 5
    union all select 6 union all select 7 union all select 8 union all select 9 )e
    on d.nr>=e.nr
AdrianBR
la source

Réponses:

9

Une possibilité ici (et c'est vraiment une extension de ce que Sean Owen a posté) est de définir un "utilisateur stable".

Pour les informations que vous avez, vous pouvez imaginer faire un user_id qui est un hachage d'ip et des informations d'agent utilisateur (pseudo code):

uid = MD5Hash(ip + UA.device + UA.model)

Ensuite, vous marquez ces identifiants avec "stable" ou "instable" en fonction des heuristiques d'utilisation que vous observez pour vos utilisateurs. Cela peut être un seuil de # de visites dans une fenêtre de temps donnée, la durée pendant laquelle leurs cookies persistent, une action de fin sur votre site (je réalise que cela n'était pas indiqué dans votre journal d'origine), etc ...

L'idée ici est de séparer les utilisateurs qui ne déposent pas de cookies de ceux qui le font.

De là, vous pouvez attribuer session_ids à des uids stables à partir de vos journaux. Vous aurez alors "laissé" session_ids pour les utilisateurs instables dont vous n'êtes pas sûr. Vous pouvez être sur ou sous-compter les sessions, attribuer le comportement à plusieurs personnes quand il n'y en a qu'une, etc ... Mais cela est au moins limité aux utilisateurs dont vous êtes maintenant "moins certain".

Vous effectuez ensuite des analyses sur votre groupe stable et le projetez sur le groupe instable. Prenez un nombre d'utilisateurs par exemple, vous connaissez le nombre total de sessions, mais vous n'êtes pas sûr du nombre d'utilisateurs qui ont généré ces sessions. Vous pouvez trouver # sessions / utilisateur stable unique et l'utiliser pour projeter le nombre "estimé" d'utilisateurs uniques dans le groupe instable car vous connaissez le nombre de sessions attribuées à ce groupe.

projected_num_unstable_users = num_sess_unstable / num_sess_per_stable_uid

Cela n'aide pas avec une enquête par utilisateur sur les utilisateurs instables, mais vous pouvez au moins tirer un certain kilométrage d'une cohorte d'utilisateurs stables qui persistent pendant un certain temps. Vous pouvez, par diverses méthodes, projeter le comportement et les décomptes dans le groupe instable. Ce qui précède est un exemple simple de quelque chose que vous voudrez peut-être savoir. L'idée générale est à nouveau de définir un ensemble d'utilisateurs dont vous êtes sûr de persister, de mesurer ce que vous voulez mesurer et d'utiliser certaines vérités fondamentales (recherches numériques, visites, clics, etc.) pour vous projeter dans l'espace utilisateur inconnu et estimer compte pour eux.

Il s'agit d'un problème de longue date dans le comptage d'utilisateurs uniques, la journalisation, etc. pour les services qui ne nécessitent pas de connexion.

cwharland
la source
Une très bonne réponse! Pour ceux qui lisent, je voudrais ajouter que dans le cas des cookies tiers, de nombreuses versions mobiles de safari ne les prendront pas par défaut, et d'autres navigateurs ont la même chose dans leurs pipelines. Gardez cela à l'esprit et traitez-les séparément.
AdrianBR
1
Le désabonnement des cookies est tout à fait le problème pour les services qui ne nécessitent pas de connexion. De nombreux utilisateurs ne comprennent tout simplement pas les cookies, de sorte que vous avez probablement une cohorte que vous pouvez suivre pendant une durée appréciable.
cwharland
6

Il n'y a pas grand-chose que vous pouvez faire avec seulement ces données, mais le peu que vous pouvez faire ne repose pas sur l'apprentissage automatique.

Oui, les sessions à partir de la même IP mais de différents User-Agents sont presque certainement des utilisateurs distincts. Les sessions avec la même IP et le même User-Agent sont généralement le même utilisateur, sauf dans le cas de proxy / points d'accès Wi-Fi. Ceux que vous pourriez identifier en examinant la distribution du nombre de sessions par IP pour identifier les IP «agrégées» probables. Les sessions du même IP / User-Agent qui se chevauchent dans le temps sont presque sûrement distinctes.

Pour mieux distinguer les utilisateurs, vous auriez besoin de plus d'informations. Par exemple, les sites ou les adresses IP auxquels l'utilisateur se connecte constitueraient une base très solide pour différencier les sessions. Ensuite, vous pourriez entrer dans un apprentissage plus sophistiqué pour savoir quand les sessions sont les mêmes ou des utilisateurs différents.

Sean Owen
la source
Le contexte serait des informations traçables dans un seul site avec un cookie tiers, via un iframe. Le site serait du commerce électronique. Je trouve que Google Analytics s'intéresse principalement à l'IP, parfois à useragent, et je peux obtenir des chiffres très similaires en ne regardant que l'IP dans un laps de temps. Mais Google Analytics est connu pour sur-signaler de 30% ish, selon le contexte
AdrianBR
La consultation des pages de produits visitées n'aide pas non plus, car la structure de la boutique est telle qu'elle conduit les utilisateurs sur des chemins prédéterminés, conduisant à un comportement très similaire
AdrianBR
1
De plus, je sais que le BC ne rentre pas dans le contexte de cette question. Les algorithmes codés en dur sont plutôt utilisés par la plupart des solutions de suivi qui offrent des résultats raisonnables. Les derniers degrés de précision, qui seraient réalisables avec le ML, sont moins pertinents, car ces informations sont plutôt utilisées pour observer les tendances.
AdrianBR