[PYTHON] Je souhaite détecter une connexion non autorisée à Facebook avec Jubatus (1)

La dernière fois, j'ai fait Classificateur pas trop utile, donc je vais faire quelque chose qui peut être utilisé un peu plus.

téléchargement de données facebook

Sur facebook, cliquez sur la marque "▼" en haut à droite (à partir de juillet 2014), Lorsque vous affichez l'élément «Paramètres», il y a un lien «Télécharger les données Facebook» en bas de «Paramètres généraux du compte». Si vous cliquez dessus et effectuez diverses authentifications, vous pouvez télécharger les données que vous avez publiées sur Facebook au format htm. J'ai essayé de télécharger ceci avec un sentiment léger, mais honnêtement, il y avait trop d'informations critiques et je l'ai tirée un peu. Je pense que si nous faisons un recommandateur en utilisant ces données, nous pourrons créer quelque chose avec une grande précision.

security

Donc, dans cette histoire, il y a un élément appelé «sécurité» dans les données téléchargées ci-dessus, Vous pouvez voir qui s'est connecté à ce compte à partir d'où sur Facebook, etc. Ceci est utilisé pour détecter les accès non autorisés.

J'utilise toujours Jubatus. Il existe une API appelée jubaanomaly pour détecter les valeurs aberrantes, alors utilisez-la.

configration

Le fichier de configuration du serveur Jubatus se trouve ici. https://github.com/chase0213/anomal_facebook_activity/blob/master/lof.json

Puisqu'il s'agit essentiellement de l'échantillon tel qu'il est, il n'y a pas d'explication particulière. C'est aussi un bon point de Jubatus que vous puissiez créer quelque chose qui puisse être utilisé dans une certaine mesure même si vous utilisez l'échantillon tel quel.

Cette fois, c'est "Jubatus de ~ (1)", donc quand je publie (2), je pense que j'ai réglé ici correctement.

pre-processing

Les données téléchargées depuis Facebook sont balisées au format htm, elles seront donc transformées en conséquence. Cette fois, j'ai créé un script python et je l'ai transformé (python 2.6). https://github.com/chase0213/anomal_facebook_activity/blob/master/data/trim.py

(Vous pouvez l'écrire comme string_rules, mais j'avais besoin de le formater un peu plus)

anomaly detection

Lorsque les données sont prêtes, transmettez-les au serveur Jubatus pour le calcul des anomalies.

client = jubatus.Anomaly(HOST,PORT,NAME)

Démarrez le serveur Jubatus comme

ret = client.add(datum)

Ajoutez les données sous forme de. datum est une donnée au format jubatus.common.Datum. Puis ret renverra l'id et l'anomalie de ces données. Dans un premier temps, il est préférable de regarder la valeur de retour de ce client.add (Datum) et de voir que les données sont correctement réparties autour de 1.0. Si l'un d'entre eux est clairement différent de 1.0, veuillez examiner les données de plus près. Il existe une possibilité d'accès non autorisé.

Donc, après avoir accumulé quelques données sur le serveur Jubatus, Je vais vous donner des données complètement différentes de l'ordinaire.

anomal_datum = Datum({
    "activity": "DELETE",
    "time":     "15 juillet 2014 17:59 UTC+12",
    "ip_address": "127.0.0.1",
    "brawser": "IE6",
    "cookie": "???"
})

Après avoir défini les données, laissez le serveur Jubatus calculer l'anomalie. Ici, nous voulons voir si c'est anormal sans enregistrer les données, nous utilisons donc client.calc_score au lieu de client.add.

anomality = client.calc_score(anomal_datum)

calc_score a une valeur flottante comme valeur de retour, alors veuillez l'aimer si elle est bouillie ou cuite.

J'aimerais pouvoir afficher des "données ordinaires", mais je les omettrai car j'augmenterai l'accès aux anomalies par moi-même.

En résumé, ça ressemble à ça. https://github.com/chase0213/anomal_facebook_activity/blob/master/anomaly.py

Alors, voici le résultat de son essai.

$ python anomaly.py
anomality(anomal datum): 2.33819794655
anomality(nomal datum): 0.999999880791

La deuxième ligne donne les données anormales définies ci-dessus et la troisième ligne donne les "données ordinaires". Pour les données anormales, le degré d'anomalie est nettement plus élevé. Il serait peut-être préférable de définir un test statistique ou un seuil pour déclencher une alerte.

C'est tout pour essayer Jubatus, qui est un peu plus utile que la dernière fois. La prochaine fois, j'aimerais régler cela un peu plus sérieusement.

En passant, lorsque je recherche sur Google "Anomalie Jubatus", je sens que la page de l'ancienne API est affichée. Veuillez noter que l'API peut ne pas fonctionner correctement selon la version (cette fois).

Recommended Posts

Je souhaite détecter une connexion non autorisée à Facebook avec Jubatus (1)
Je veux détecter des objets avec OpenCV
Je veux faire ○○ avec les Pandas
Je veux déboguer avec Python
Je veux écrire un blog avec Jupyter Notebook
Je veux installer Python avec PythonAnywhere
Je veux analyser les journaux avec Python
Je veux jouer avec aws avec python
Je veux utiliser MATLAB feval avec python
J'ai essayé de détecter rapidement un mouvement avec OpenCV
Je veux moquer datetime.datetime.now () même avec pytest!
Je souhaite afficher plusieurs images avec matplotlib.
Je veux frapper 100 sciences des données avec Colaboratory
Je veux faire un jeu avec Python
Je veux être OREMO avec setParam!
Je souhaite utiliser le répertoire temporaire avec Python2
J'ai essayé de détecter un objet avec M2Det!
Je ne veux pas utiliser -inf avec np.log
#Unresolved Je veux compiler gobject-introspection avec Python3
Je souhaite utiliser ip vrf avec SONiC
Je veux résoudre APG4b avec Python (chapitre 2)
Je veux recommencer avec Migrate de Django
Je veux écrire dans un fichier avec Python
Je veux convertir une image en WebP avec sucette
Je veux détecter des images de chats d'Instagram
Je veux faire la transition avec un bouton sur le ballon
Je veux gérer l'optimisation avec python et cplex
Je veux escalader une montagne avec l'apprentissage par renforcement
Je veux hériter de l'arrière avec la classe de données python
Je veux travailler avec un robot en python.
Je veux diviser une chaîne de caractères avec hiragana
Je veux AWS Lambda avec Python sur Mac!
Je souhaite créer manuellement une légende avec matplotlib
[TensorFlow] Je souhaite traiter des fenêtres avec Ragged Tensor
Je veux faire fonctionner un ordinateur quantique avec Python
Je veux lier une variable locale avec lambda
Je veux résoudre SUDOKU
Je veux pouvoir analyser des données avec Python (partie 3)
Je souhaite supprimer l'avertissement d'importation non résolue de Python avec vsCode
Je souhaite utiliser facilement les fonctions R avec le notebook ipython
Je souhaite spécifier une autre version de Python avec pyvenv
Je veux pouvoir analyser des données avec Python (partie 1)
Je veux créer un éditeur de blog avec l'administrateur de django
Je veux démarrer un environnement Jupyter avec une seule commande
[NetworkX] Je souhaite rechercher des nœuds avec des attributs spécifiques
Je veux faire une macro de clic avec pyautogui (désir)
Je veux changer le drapeau japonais en drapeau des Palaos avec Numpy
Je veux pouvoir analyser des données avec Python (partie 4)
Je veux colorier des photos en noir et blanc de souvenirs avec GAN
Je veux pouvoir analyser des données avec Python (partie 2)
Je veux assister automatiquement à des cours en ligne avec Python + Selenium!
Je veux faire une macro de clic avec pyautogui (Outlook)
[Python] Je souhaite utiliser l'option -h avec argparse
Je souhaite utiliser un environnement virtuel avec jupyter notebook!
Je veux installer le package de requirements.txt avec poésie
[Visualisation] Je veux dessiner un beau graphique avec Plotly
Je veux mettre fin au pool multiprocesseur de python avec ctrl + c (KeyboardInterrupt)
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove