Découvrez l'âge de l'utilisateur VK ou quoi d'autre le graphique social peut-il dire

"Dis-moi qui est ton ami et je te dirai qui tu es."
Euripides 480-406 BC e.

Pendant longtemps, j'ai regardé API VK comme un chat dans une machine à laver - j'ai été hypnotisé par l'opportunité de mener une sorte de recherche dans l'un des plus grands réseaux sociaux, qui a pénétré de nombreux domaines de notre vie. Et une fois qu'une question est née, est-il possible de déterminer son âge par le cercle social d'un utilisateur d'un réseau social?




Pour ceux qui voulaient connaître l'âge caché, il y avait un petit hack avant. Il vous suffit d'utiliser la recherche par personnes, de spécifier des paramètres étroits pour que le profil souhaité tombe dans le SERP, puis d'utiliser la recherche binaire pour déterminer la tranche d'âge. Ou il s'avère que les coordonnées indiquent soudainement l'année d'obtention du diplôme. Et vous n'avez pas besoin d'écrire de scripts. Mais l'âge caché et les informations indirectes peuvent être faussées, et surtout, l'article ne traite toujours pas de la manière d'obtenir plus d'informations personnelles. L'article propose d'analyser l'un des aspects du graphe social.

L'une des premières choses qui vient à l'esprit lors de l'examen des connexions de profil: voyons l'âge des camarades de classe et des camarades de classe, dans la grande majorité des cas, cet utilisateur aura un âge de + - 1 an. Pour cela, grâce à l'enseignement secondaire universel. Il n'y a qu'une seule mise en garde: identifier les camarades de classe. Plus le temps passe de la remise des diplômes, plus nous commençons à tourner dans des cercles plus tachetés. Les amis de l'école semblent appartenir à une vie antérieure, et maintenant ils font presque imperceptiblement partie d'un grand nombre de nouveaux amis. Est-il possible pour les profils de personnes d'âge mûr de comprendre en quelque sorte quel flux ils ont étudié et, par conséquent, l'âge approximatif?

Examinons donc la tâche de déterminer l'âge d'un utilisateur comme déterminant un sous-ensemble de camarades de classe et de camarades de classe. Autrement dit, nous avons pris pour hypothèse qu'il a chez des amis un certain nombre de camarades de classe, dont l'âge correspond approximativement à l'âge du profil. Bien sûr, il existe des exceptions, mais elles sont rares. Une personne va à l'école de cloche en cloche pendant 10 ans, au cours de cette période de nombreux contacts inter-sociaux ont été établis. Bref, tout le monde se connaît, alors que la répartition de l'âge dans cet enchevêtrement social est minime. À l'avenir, lorsqu'une personne rejoint d'autres groupes, en règle générale, la répartition d'âge en eux est importante, qu'il s'agisse de travail, d'activités sportives ou d'un club d'intérêt. Sur la base de cette différence, nous essaierons d'identifier les groupes sociaux nécessaires.

Jetons un coup d'œil à l'un des profils VK avec beaucoup d'amis. Nous obtiendrons la liste d'amis de l'utilisateur à l'aide de la requête friends.get. Nous ne considérerons les profils qu'avec l'âge spécifié et les placerons sur la chronologie sous forme d'histogramme par année. Il y a une légère nuance sur la façon de diviser un grand nombre d'amis en intervalles annuels. Après tout, nous voulons nous assurer que les camarades de classe entrent dans un intervalle, et non répartis sur deux voisins. Il a été constaté expérimentalement qu'il est préférable de briser l'année à l'automne et que les utilisateurs dont la date de naissance est au cours de la saison jaune entrent immédiatement dans deux intervalles adjacents. Autrement dit, des intervalles de 15 mois de septembre à novembre sont obtenus par incréments de 12 mois.

oX est l'âge des utilisateurs, oY est le nombre d'utilisateurs qui tombent dans un intervalle donné.

Nous observons un plateau de cinq ans avec un nombre annuel maximum d'amis. Il n'est pas du tout évident de trouver un groupe de pairs parmi cette période de 5 ans. En vérité, une telle image n'est pas typique. Plus souvent, l'année de naissance des camarades de classe / camarades de classe se démarque des autres par un plus grand nombre d'amis. Mais dans un cas difficile pour chaque utilisateur, trouvons le rapport des amitiés au sein du groupe annuel au nombre de connexions avec d'autres amis de l'utilisateur d'origine, pour lesquels nous déterminons l'âge; puis nous faisons la moyenne de cet indicateur pour chaque année. Nous appelons cela le coefficient de connectivité normalisé.

oX est l'âge des utilisateurs, oY est le coefficient de connectivité normalisé pour un intervalle donné.

La situation a changé et les dirigeants ont une seule année. Une équipe avec un âge uniforme a une part importante, donc nous avons le droit de nous attendre à ce que puisque l'utilisateur en fait partie, alors il ait un âge similaire. Mais que se passe-t-il si une personne de ce collectif joue un rôle spécial, par exemple, pas un camarade de classe, mais un enseignant? En effet, dans le cas des enseignants / formateurs, il peut y avoir des sous-groupes avec une forte densité de connexions dans un intervalle d'âge étroit. En partie, ce cas peut être traité si, lors du choix d'un groupe, non pas avec la connectivité la plus élevée, mais avec l'âge le plus élevé parmi les groupes avec une connectivité suffisamment grande. En d'autres termes, utilisez la logique selon laquelle une personne sur son chemin de vie doit d'abord être un étudiant ordinaire, et ensuite seulement jouer un rôle distingué dans des «équipes avec un âge uniforme».

Une description plus détaillée et quelques formules
Express numériquement détecté sur le phénomène graphique. Soit F0 l'ensemble des amis de l'utilisateur pour lequel l'âge est calculé. Fi - de nombreux amis de n'importe quel profil. Fi, y est l'ensemble des amis de profil ayant une date de naissance spécifiée dans l'intervalle annuel y. Alors i, y est la connexion du profil i dans l'intervalle :

Ci,y= frac|F0 capFi,y||F0 capFi|


y est le coefficient de connectivité non normalisé dans l'intervalle y pour tous les profils:

Cy= sumiF0,yCi,y


Et enfin, l'année de naissance souhaitée:

 DeclareMathOperator argmaxargmaxannée of birth= argmaxy( fracCy|F0,y|):Cy geq0.7 maxy inY(Cy)



Il y avait aussi une idée de considérer à quel type telle ou telle connexion appartient. Si le type de connexion est des amis de l'école ou de l'université, considérez-les avec un poids accru. Et si le type de collègue, de parents et tout le reste, alors ne tenez pas compte de ces relations en général. Cependant, si vous utilisez des demandes de téléchargement de telles informations, le temps d'attente augmentera d'un facteur 5. De plus, la spécification du type de connexion n'est pas une pratique courante, il a donc été décidé de ne demander ces informations que pour les profils avec peu d'amis.

De l'algorithme ci-dessus, les limites naturelles d'applicabilité de l'approche pour déterminer l'âge suivent. Si l'utilisateur ne souffre pas de nostalgie pour ses années d'école, et qu'il n'a pas d'amis de ses camarades de classe / camarades de classe, alors nous devons utiliser une autre méthode.

Que diriez-vous d'essayer ce gâchis dans les affaires? Un service de bande dessinée a été mis en place dans le groupe VK «Fortune Teller of the Age» . Là, un bot amical perdra de l'âge si vous déposez un lien vers celui-ci sur un profil VK non fermé en utilisant l'algorithme ci-dessus.

Comment est organisé le service
Le premier maillon du travail de la diseuse de bonne aventure est le mécanisme de message du groupe VK. Dans les paramètres du groupe, l'API de rappel est connectée à son propre serveur. Comme types d'événements envoyés, sélectionnez «Message entrant». De cette façon, le message de groupe se transforme en requête sur notre serveur. Si vous n'êtes pas ami avec le frontend comme moi, alors c'est une super option. Ensuite, à partir du serveur, l'API VK est appelée avec les requêtes users.get pour le profil en question et friends.get pour les amis du profil avec une date de naissance connue. Leur mise en œuvre nécessite des applications VK de jeton d'accès. Je n'ai pas utilisé de demandes nécessitant une confirmation des droits d'utilisateur, afin de ne pas charger les personnes de demandes d'autorisation d'accès. Une fois le calcul de l'âge estimé effectué, une réponse à la demande du groupe est formée et l'utilisateur diseur de bonne aventure voit la réponse dans les boîtes de dialogue. Pas cher et gai.

Quant à l'amélioration de l'algorithme lui-même, rien ne vous empêche d'aller encore plus loin, en collectant un ensemble de données de formation à partir de profils avec un âge spécifié et en formant un modèle de régression basé, disons, sur une matrice d'adjacence d'un graphique d'âge parmi les amis de profil. Je suis sûr qu'avec un échantillon suffisamment grand, les résultats seront plus précis que l'heuristique. Comme je l'ai mentionné plus haut, j'étais curieux de vérifier l'idée fondamentale, donc je n'ai pas l'intention de développer cette direction.

En conclusion, je voudrais aborder l'aspect éthique. À mon avis, le «diseur de bonne aventure de l'âge» est à la frontière de la vie privée, mais ne le traverse toujours pas, car il utilise des données ouvertes pour l'analyse. En fait, par conséquent, pour les utilisateurs avec un profil caché, le service ne fonctionnera pas.

On a le sentiment que toutes sortes de «diseurs de bonne aventure de l'âge», comme les moteurs de recherche, SearchFace ne sont que les premiers signes d'un monde socialement transparent. Dans une certaine mesure, cela peut être appelé un retour aux sources. L'homme a longtemps existé dans de petites sociétés, où tout le monde se voyait. Une réputation ouverte fait partie intégrante du mécanisme de régulation sociale. Oui, de nouveaux outils permettront progressivement de refaire les interactions sociales d'une personne à la vue, seulement maintenant au niveau mondial. Oui, comme tout outil, il peut être utilisé au détriment. Dois-je les rendre accessibles à tous? Je ne sais pas. Mais je suis sûr que si de tels outils ne sont disponibles que pour un cercle restreint de personnes, alors l'équilibre vers une utilisation constructive ne changera certainement pas.

Source: https://habr.com/ru/post/fr447992/


All Articles