[PYTHON] J'ai essayé d'utiliser BigQuery ML

introduction

Dans Procédure d'apprentissage automatique de base: (1) Modèle de classification, les données sont importées de BigQuery dans l'environnement Python et analysées par scicit-learn.

Cependant, récemment, comme BigQueryML, il est devenu possible d'effectuer un apprentissage automatique uniquement dans BigQuery. Cette fois, je vais essayer BigQuery ML.

Environnement analytique

Google BigQuery Google Colaboratory

Page référencée

Données cibles

Similaire à Précédent, créez un résultat en réponse à la campagne et product1 ~ en tant que prix d'achat du produit.

id result product1 product2 product3 product4 product5
001 1 2500 1200 1890 530 null
002 0 750 3300 null 1250 2000

1. Construisez un modèle

Jusqu'à présent, BigQuery n'avait que TABLE et VIEW, mais il peut également être enregistré au format MODEL. (Il existe d'autres formats tels que FUNCTION)

from google.cloud import bigquery

query=f"""CREATE OR REPLACE MODEL `myproject.mydataset.mymodel`
OPTIONS
  (model_type='logistic_reg', labels = ['result']) AS #Variable objective (variable attendue)

#Prédire à l'aide des variables suivantes
SELECT result, product1, product2, product3, product4, product5
FROM `myproject.mydataset.mytable_training`
"""

job = client.query(query)
result = job.result()

Les trois suivants peuvent être sélectionnés pour model_type. (Il semble que vous puissiez utiliser le modèle Tensorflow, mais je vais l'omettre ici.)

--logistic_reg: analyse de régression logistique (la variable objective est une variable catégorielle) --linear_reg: analyse de régression linéaire (la variable objective est une variable numérique) --kmeans: analyse de cluster

Cette fois, logistic_reg est utilisé car il s'agit de répondre ou non à la promotion.

2. Évaluer le modèle

Appelez le modèle créé par ML.EVALUATE et vérifiez-le à l'aide des données de test.

query=f"""
SELECT
  roc_auc, precision, recall
FROM
  ML.EVALUATE(MODEL `myproject.mydataset.mymodel`,  ( #Appeler le modèle créé

#Valider avec différentes données de test
SELECT result, product1, product2, product3, product4, product5
FROM `myproject.mydataset.mytable_test`
))
"""

job = client.query(query)
result = job.result()

L'exactitude, la précision et le rappel sont utilisés pour évaluer l'exactitude des données de test.

3. Appliquer le modèle

Appelez le modèle créé par ML.PREDICT et appliquez le modèle aux nouvelles données.

query=f"""
SELECT
*
FROM
  ML.PREDICT(MODEL `myproject.mydataset.mymodel`,  ( #Appeler le modèle créé

#Appliquer le modèle aux nouvelles données
SELECT product1, product2, product3, product4, product5
FROM `myproject.mydataset.mytable`)
);
"""

#Nom de la table du jeu de données du projet à afficher
project = "myproject"
client = bigquery.Client(project=project)
dataset = "mydataset"
ds = client.dataset(dataset)
table = "mytable_predict"

job_config = bigquery.QueryJobConfig()
job_config.destination = ds.table(table)
job = client.query(query, job_config=job_config)

result = job.result()

ML.EVALUATE lors de l'évaluation d'un modèle. Pour postuler, il suffit d'appeler chaque modèle créé par ML.PREDICT. C'est assez facile à utiliser.

en conclusion

Les méthodes qui peuvent être utilisées sont encore limitées, mais il est plus facile à utiliser que lors de sa création avec Procédure d'apprentissage automatique de base: ① Modèle de classification. ..

D'un autre côté, si vous pouvez le faire si facilement, vous vous demanderez quoi faire lorsque vous essayez d'améliorer le modèle. Je me demande si cela va s'améliorer en fonction de la variable utilisée.

Recommended Posts

J'ai essayé d'utiliser BigQuery ML
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser openpyxl
J'ai essayé d'utiliser Ipython
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
J'ai essayé d'utiliser Jupyter
J'ai essayé d'utiliser doctest
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser jinja2
J'ai essayé d'utiliser du folium
J'ai essayé d'utiliser la fenêtre de temps
J'ai essayé d'utiliser l'API BigQuery Storage
[J'ai essayé d'utiliser Pythonista 3] Introduction
J'ai essayé d'utiliser easydict (mémo).
J'ai essayé la reconnaissance faciale avec Face ++
J'ai essayé d'utiliser RandomForest
J'ai essayé d'utiliser Amazon Glacier
J'ai essayé d'utiliser git inspector
J'ai essayé d'utiliser magenta / TensorFlow
J'ai essayé d'utiliser AWS Chalice
J'ai essayé d'utiliser l'émojinateur Slack
J'ai essayé d'utiliser Rotrics Dex Arm # 2
J'ai essayé d'utiliser Rotrics Dex Arm
J'ai essayé d'utiliser GrabCut d'OpenCV
J'ai essayé d'utiliser Thonny (Python / IDE)
J'ai essayé de communiquer avec le client serveur en utilisant tmux
J'ai essayé l'apprentissage par renforcement avec PyBrain
J'ai essayé l'apprentissage en profondeur avec Theano
J'ai essayé d'utiliser le notebook jupyter d'une manière ou d'une autre
[Kaggle] J'ai essayé le sous-échantillonnage en utilisant un apprentissage déséquilibré
J'ai essayé de photographier une vague de tortue en utilisant OpenPose
J'ai essayé d'utiliser l'API checkio
J'ai essayé le traitement asynchrone en utilisant asyncio
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé de gratter
J'ai essayé PyQ
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow
J'ai essayé d'utiliser l'API de données YOUTUBE V3
[Kaggle] J'ai essayé l'apprentissage d'ensemble avec LightGBM
J'ai essayé d'utiliser PyEZ et JSNAPy. Partie 2: J'ai essayé d'utiliser PyEZ
J'ai essayé d'utiliser l'optimisation bayésienne de Python
J'ai essayé de classer le texte en utilisant TensorFlow
J'ai essayé d'utiliser la recherche sélective comme R-CNN