[PYTHON] J'ai essayé de faire 5 modèles de base d'analyse en 3 ans

Cela fait trois ans que j'ai rejoint l'entreprise, donc un résumé de ce que j'ai fait jusqu'à présent, y compris mon propre mémo.

Refus

En raison de la période de développement, je ne pouvais pas comprendre et régler chaque système en détail. Parce qu'il a été construit par un individu dont les informations ont été examinées dans la période Quelque chose comme "Non, non, si vous le réglez correctement, vous n'obtiendrez pas ce résultat." Veuillez noter qu'il peut y en avoir plusieurs. De plus, il y a trois ans, je n'avais jamais touché à Linux ou à SQL, donc Je pense que celui dont j'étais en charge au début n'était pas aussi simple à réaliser.

couler

1re génération: infrastructure basée sur Amazon RedShift

Aperçu

Une plateforme d'analyse pour une visualisation transversale des KPI de notre série de jeux Utilisez fluentd pour remplir RedShift et agréger dans des lots quotidiens, Le résultat de l'agrégation a été stocké dans une autre table de RedShift. Ruby est utilisé pour le batch et CakePHP est utilisé pour le framework. Puisque fluentd est fait par Ruby, Ruby peut être créé en créant des plug-ins. CakePHP est une culture d'entreprise.

Période de développement

Environ 6 mois d'octobre 2013 à mars 2014 (parallèlement à d'autres opérations, y compris la période de vérification)

Impressions

Seule l'image que j'avais désespérément envie d'apprendre car je ne l'ai touchée que pour la première fois ...

Deuxième génération: fondation basée sur Hive avec Amazon EMR

Déclencheur de transition

Le coût de maintenance de Red Shift était élevé pour la petite quantité de données. (À ce moment-là, les performances de coût étaient mauvaises car il n'y avait qu'un nœud de stockage dense) De plus, le temps d'agrégation est plus long que prévu, et je l'ai vérifié avec le slogan "Hadoop est populaire ces jours-ci, vérifions-le." Introduit parce qu'il a été confirmé que l'agrégation peut être effectuée à faible coût.

Aperçu

Une plateforme d'analyse qui vous permet de voir les KPI pour les jeux autres que la série. "Python est riche en bibliothèques statistiques, donc si vous êtes un ingénieur d'analyse, pourquoi pas Python?" Il y avait une recommandation d'une personne âgée. J'ai donc utilisé Python pour le batch et django pour Python comme framework.

Période de développement

Environ 14 mois d'avril 2014 à juin 2015 (parallèlement à d'autres travaux, y compris la période de vérification. La visualisation est gérée par une autre personne)

Impressions

Je ne pense pas que le temps de décompte ait radicalement changé (il ne reste plus de notes détaillées ...) Cependant, avec EMR, le coût total pourrait être réduit à environ la moitié car le serveur n'a besoin d'être démarré que pour la durée totale. Je pense que démarrer Python ici était la bonne réponse pour faire Spark et l'apprentissage automatique plus tard. Facile à écrire!

3e génération: fondation basée sur Spark avec Amazon EMR

Déclencheur de transition

Je voulais toucher à la nouvelle technologie, et Spark devenait un sujet brûlant, alors j'ai décidé de l'essayer en premier. Si le cache est efficace, le temps d'agrégation sera raccourci, si le temps d'agrégation est court, le coût d'agrégation peut être réduit, et comme le traitement Spark est effectué avec Python, il est facile de migrer.

Aperçu

Le simple changement de Hive à Spark est presque identique à celui de la 2ème génération. J'en ai créé un basé sur RDD avec Spark1.2 et un basé sur DataFrame avec Spark1.4.

Période de développement

Environ 6 mois de juin 2015 à décembre 2015 (parallèlement à d'autres opérations, y compris la période de vérification)

Impressions

En raison du manque de documentation, il était difficile de construire par essais et erreurs. Même si je vais à un séminaire, il y a beaucoup d'entreprises en train d'envisager l'introduction, donc je ne peux pas beaucoup consulter ... Je pense avoir acquis les compétences nécessaires pour traduire les résultats des traductions Google afin de lire des articles anglais inconnus. Si Spark utilise la fonction de cache, le traitement itératif est rapide (lors de la division de la DAU en différents segments, le journal de connexion est mis en cache, etc.), mais l'inconvénient est que cela prend du temps car le cache ne fonctionne pas la première fois. C'était.

4e génération: une fondation basée sur un traitement distribué sur MySQL et des serveurs

Déclencheur de transition

En faisant diverses choses, j'ai pensé: "Oh, je n'ai pas besoin de Hive ou Spark en premier lieu avec cette quantité de données." Cela a été confirmé en examinant l'algorithme d'agrégation et en vérifiant qu'il n'y a pas de problème avec la quantité actuelle de données lorsque l'on considère correctement la conception de la table DB. De plus, en raison du fait que le cache ne fonctionne pas la première fois de Spark, il semble que le traitement sur la base de données ou le serveur peut raccourcir le temps d'agrégation.

Aperçu

Le contenu du traitement est le même que celui de la génération précédente. Changé pour traiter dans plusieurs processus en Python. Au lieu de mettre tous les journaux dans la base de données Je n'ai mis que les journaux nécessaires à l'agrégation et les ai supprimés lorsqu'ils n'étaient plus utilisés. (Le fichier journal reste dans S3)

Période de développement

Environ 3 mois de décembre 2015 à février 2016 (parallèlement à d'autres opérations, y compris la période de vérification)

Impressions

Par rapport à Spark, le temps d'agrégation est inférieur à la moitié. Aucun coût supplémentaire car nous avons utilisé un serveur et une base de données toujours en cours d'exécution à d'autres fins. Je pense que cela ne fonctionnera pas s'il s'agit d'environ Go par jour.

5e génération: plateforme basée sur BigQuery (en construction)

Déclencheur de transition

Même si la quantité de données augmente à l'avenir, elle peut être gérée dans une certaine mesure, mais on craint qu'elle ne soit pas utilisable lorsque la plage d'analyse s'élargit et que la quantité de données augmente à la fois, et lorsque la quantité de données est importante dans l'analyse ad hoc, un cluster Spark est lancé. Je faisais ... J'ai vérifié que ce serait plus facile si je pouvais effectuer des analyses quotidiennes par lots et ad hoc avec BigQuery.

Aperçu

Le contenu du traitement est le même que celui de la génération précédente. J'ai utilisé Luigi, un framework pour construire des pipelines de données fait par Python, pour les lots.

Période de développement

De février 2016 à nos jours

Impressions (à mi-chemin)

Il faut beaucoup de temps pour faire une table. Même si vous demandez à Google, cela prendra du temps, alors attendez-vous à le faire à l'avenir. La limite actuelle de 1 000 tables par requête est également difficile à utiliser. Pour les titres qui dépassent 1000 jours après la sortie, il n'est pas possible de demander simplement le montant de facturation cumulé pour chaque utilisateur aux Xe et Ye jours. Il est nécessaire d'éviter la limite de 1 000 tables, comme créer une table pour chaque jour avec «montant de facturation cumulé jusqu'au jour précédent + montant de facturation pour la journée en cours».

Cependant, le temps requis pour l'agrégation est court, et même si toutes les données sont incluses, il n'y a presque aucun coût de gestion, c'est donc un gros avantage que l'analyse ad hoc soit facile. Le coût d'agrégation pour le premier 1 To de chaque mois est gratuit, donc si la quantité de données est faible, le coût d'agrégation sera presque nul.

Résumé

Lorsque le journal à agréger est d'environ plusieurs Go

article Les coûts d'installation Le coût d'exploitation Facilité d'analyse ad hoc
RedShift ✕(Si vous utilisez un SSD, il s'agit de △)
Hive
Spark
SQL et traitement distribué
BigQuery △(La création de table est lente) ?(Le coût final est encore inconnu. Probablement ◯)

[Coût d'introduction] ◯: Si vous écrivez SQL, il n'y a presque aucun coût △: Il y a d'autres points à considérer en plus d'écrire du SQL

[Le coût d'exploitation] ◎: Aucun coût supplémentaire car le serveur et la base de données qui sont toujours en cours d'exécution à d'autres fins sont utilisés. ◯: 50 000 ou moins △: un peu moins de 100 000 ✕: plus de 100 000

[Facilité d'analyse ad hoc] ◯: Pas de problème si SQL est appliqué △: Il y a quelques difficultés. Réponse lente ou besoin de prendre en compte le cache


Je pense que cela peut ne pas convenir en fonction de la quantité de données et du but de l'analyse. Je pense qu'il y a des endroits où on-pres est meilleur que le cloud. Après tout, on se sent comme la bonne personne au bon endroit. Personnellement, j'aime Spark ou BigQuery. Spark a une bibliothèque d'apprentissage automatique, et c'est bien parce qu'elle est flexible car elle peut être traitée par Scala et Python en plus de SQL. Après cela, si la vitesse de traitement est améliorée. BigQuery ne nécessite pas de réglage précis et est peu coûteux, il est donc bon qu'il soit facile à utiliser. J'espère que les problèmes actuels seront bientôt résolus. Avec le recul, il subissait des rénovations majeures à un rythme d'une fois tous les six mois. Je n'ai pas pu creuser plus profondément un par un, mais je suis reconnaissant pour l'environnement où j'ai vécu tant de choses en trois ans.

Recommended Posts

J'ai essayé de faire 5 modèles de base d'analyse en 3 ans
J'ai essayé différents modèles de chaînes de date à saisir dans pandas.to_datetime
J'ai essayé de créer une application OCR avec PySimpleGUI
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé d'implémenter le blackjack du jeu Trump en Python
J'ai essayé de créer un article dans Wiki.js avec SQL Alchemy
J'ai essayé de faire une activité qui définit collectivement les informations de position
J'ai essayé de créer un environnement de MkDocs sur Amazon Linux
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
[Python] Japonais simple ⇒ J'ai essayé de créer un outil de traduction en anglais
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
J'ai essayé d'implémenter PLSA en Python
[Premier grattage] J'ai essayé de créer un personnage VIP pour Smash Bra [Beautiful Soup] [En plus, analyse de données]
J'ai essayé de comprendre l'apprentissage supervisé de l'apprentissage automatique d'une manière facile à comprendre, même pour les ingénieurs serveurs 1
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
Je veux faire un programme d'automatisation!
J'ai créé une API Web
J'ai essayé de comprendre l'apprentissage supervisé de l'apprentissage automatique d'une manière facile à comprendre, même pour les ingénieurs serveurs 2
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.
J'ai créé un capteur d'ouverture / fermeture (lien Twitter) avec TWE-Lite-2525A
J'ai essayé de résumer Cpaw Level1 & Level2 Write Up d'une manière facile à comprendre
Je veux colorer une partie de la chaîne Excel avec Python
Je souhaite laisser une commande arbitraire dans l'historique des commandes de Shell
J'ai essayé d'effectuer une analyse de cluster de clients à l'aide des données d'achat
J'ai essayé d'afficher la valeur d'altitude du DTM dans un graphique
[Lambda] J'ai essayé d'incorporer un module externe de python via S3
J'ai essayé d'implémenter le jeu de cartes de Trump en Python
J'ai essayé d'obtenir une image en grattant
J'ai essayé de trouver le rapport de circonférence par 100 millions de chiffres
J'ai essayé d'intégrer Keras dans TFv1.1
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé de faire de l'IA pour Smash Bra
J'ai essayé d'implémenter TOPIC MODEL en Python
J'ai essayé de détecter un objet avec M2Det!
Faire de fixture un argument à paramétrer dans py.test
J'ai essayé l'analyse morphologique et la vectorisation de mots
J'ai essayé d'implémenter le tri sélectif en python
J'ai créé un jeu ○ ✕ avec TensorFlow
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
[Analyse des brevets] J'ai essayé de créer une carte des brevets avec Python sans dépenser d'argent
J'ai essayé de créer un environnement Ubuntu 20.04 LTS + ROS2 avec Raspberry Pi 4
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
[Azure] J'ai essayé de créer une machine virtuelle Linux avec Azure de Microsoft Learn
J'ai essayé de prédire l'évolution de la quantité de neige pendant 2 ans par apprentissage automatique
Je souhaite stocker les résultats de% time, %% time, etc. dans un objet (variable)
J'ai fait de mon mieux pour créer une fonction d'optimisation, mais cela n'a pas fonctionné.
Dessine un graphique avec Julia ... j'ai essayé une petite analyse
J'ai essayé de faire un "putain de gros convertisseur de littérature"
J'ai essayé de faire un BOT de détection de lèvre d'air et de réponse automatique pour le travail à distance
J'ai essayé de faire quelque chose comme un chatbot avec le modèle Seq2Seq de TensorFlow