# BigQuery ML: machine learning met SQL [[TOC]] ## Wat is BigQuery ML? BigQuery ML (BQML) is een set SQL-extensies waarmee je machine learning-modellen kunt trainen, evalueren en toepassen, volledig binnen BigQuery. Je schrijft SQL en BigQuery regelt de ML-infrastructuur eromheen. Voordelen: - Geen Python, TensorFlow of aparte ML-services nodig - Je data verlaat BigQuery niet, wat helpt bij beveiliging en compliance - Directe integratie met je bestaande BigQuery-datasets - Resultaten zijn gewone BigQuery-tabellen, meteen bruikbaar in Looker Studio :::warn title="Let op de ML-prijsstelling" Het trainen van een model is duurder dan een gewone query. Ingebouwde modellen (lineaire en logistische regressie, k-means) worden afgerekend per verwerkte TiB trainingsdata, maar tegen een fors hoger tarief dan de standaard on-demand queryprijs. Voorspellingen met `ML.PREDICT` op die ingebouwde modellen rekenen meestal wel op het normale on-demand tarief. De exacte bedragen verschillen per modeltype en regio en veranderen regelmatig, dus controleer altijd de actuele [BigQuery-prijspagina](https://cloud.google.com/bigquery/pricing) voor je een groot model traint. ::: ## Beschikbare modeltypen BigQuery ML kent drie soorten modellen: ingebouwde modellen die volledig in BigQuery trainen, externe modellen die via Vertex AI trainen, en remote modellen die een Vertex AI-endpoint aanroepen (waaronder generatieve modellen zoals Gemini). | Modeltype | Soort | Gebruik | |---|---|---| | Linear regression | Ingebouwd | Numerieke voorspellingen (omzet, temperatuur) | | Logistic regression | Ingebouwd | Classificatie (churn ja/nee, spam ja/nee) | | K-means clustering | Ingebouwd | Groepering van klanten of producten | | Matrix factorization | Ingebouwd | Aanbevelingssystemen | | ARIMA_PLUS | Ingebouwd | Tijdreeksvoorspelling (forecasting) | | Boosted trees (XGBoost) | Extern (Vertex AI) | Classificatie en regressie met hoge nauwkeurigheid | | DNN, Wide and Deep | Extern (Vertex AI) | Deep learning voor complexe patronen | | AutoML | Extern (Vertex AI) | Geautomatiseerde modelkeuze en tuning | | Geïmporteerd (TensorFlow, ONNX, XGBoost) | Geïmporteerd | Bestaande modellen toepassen in BigQuery | | Gemini en andere LLM's | Remote | Tekstgeneratie, samenvatten, classificeren met AI | ## Lineaire regressie: omzet voorspellen Doel: voorspel de omzet van de volgende maand op basis van historische data. ### Stap 1: Trainingsdata voorbereiden ```sql CREATE OR REPLACE TABLE `project.ml_dataset.training_data` AS SELECT EXTRACT(MONTH FROM order_date) AS maand, EXTRACT(YEAR FROM order_date) AS jaar, regio, product_categorie, SUM(omzet) AS totale_omzet FROM `project.sales.orders` WHERE order_date < '2025-01-01' GROUP BY 1, 2, 3, 4 ``` ### Stap 2: Model trainen ```sql CREATE OR REPLACE MODEL `project.ml_dataset.omzet_model` OPTIONS( model_type = 'linear_reg', input_label_cols = ['totale_omzet'], data_split_method = 'auto_split' ) AS SELECT maand, jaar, regio, product_categorie, totale_omzet FROM `project.ml_dataset.training_data` ``` ### Stap 3: Model evalueren ```sql SELECT * FROM ML.EVALUATE(MODEL `project.ml_dataset.omzet_model`) ``` Dit geeft statistieken zoals mean absolute error (MAE) en R-kwadraat. ### Stap 4: Voorspellingen maken ```sql SELECT * FROM ML.PREDICT( MODEL `project.ml_dataset.omzet_model`, ( SELECT maand, jaar, regio, product_categorie FROM `project.ml_dataset.toekomstige_periodes` ) ) ``` :::tip title="Begin klein en valideer eerst" Train je eerste model op een kleine, schone subset en kijk naar de evaluatiestatistieken voor je het op de volledige dataset loslaat. Zo houd je de trainingskosten laag en zie je snel of de features voorspellende waarde hebben. Pas daarna schaal je op. ::: ## K-means clustering: klantsegmentatie Groepeer klanten in segmenten op basis van koopgedrag: ```sql CREATE OR REPLACE MODEL `project.ml_dataset.klant_segmenten` OPTIONS( model_type = 'kmeans', num_clusters = 4 ) AS SELECT klant_id, SUM(omzet) AS totale_omzet, COUNT(*) AS aantal_orders, AVG(omzet) AS gemiddelde_orderwaarde, MAX(order_date) AS laatste_aankoop_datum FROM `project.sales.orders` GROUP BY klant_id ``` Bekijk de segmenten: ```sql SELECT centroid_id AS segment, feature, numerical_value FROM ML.CENTROIDS(MODEL `project.ml_dataset.klant_segmenten`) ``` ## Tijdreeksvoorspelling met ARIMA_PLUS Voor omzetprognoses gebruikt BigQuery ML het ingebouwde modeltype `arima_plus`: ```sql CREATE OR REPLACE MODEL `project.ml_dataset.omzet_forecast` OPTIONS( model_type = 'arima_plus', time_series_timestamp_col = 'datum', time_series_data_col = 'omzet', horizon = 30, auto_arima = TRUE ) AS SELECT DATE(order_date) AS datum, SUM(omzet) AS omzet FROM `project.sales.orders` GROUP BY datum ``` Daarna voorspellingen ophalen: ```sql SELECT * FROM ML.FORECAST( MODEL `project.ml_dataset.omzet_forecast`, STRUCT(30 AS horizon, 0.9 AS confidence_level) ) ``` ## Voorspellingen visualiseren in Looker Studio Sla de uitkomst van `ML.PREDICT` of `ML.FORECAST` op in een BigQuery-tabel via een scheduled query die bijvoorbeeld dagelijks ververst. Koppel die tabel daarna als databron in Looker Studio. Visualiseer de historische data en de forecast samen op een tijdreeksgrafiek door beide datasets te blenden op de datumkolom. Zo zien gebruikers de werkelijke cijfers en de prognose in één beeld. :::faq ### Heb ik ML-kennis nodig om BigQuery ML te gebruiken? Basiskennis van ML-concepten zoals trainen, evalueren en overfitting is nuttig. Je hoeft geen wiskundige formules te kennen, want de SQL-interface neemt veel complexiteit weg. De BigQuery ML-documentatie geeft een goede conceptuele introductie. ### Hoe weet ik of mijn model goed genoeg is? Gebruik `ML.EVALUATE` om statistieken zoals MAE, RMSE en R-kwadraat te bekijken. Voor classificatiemodellen kijk je naar precision, recall en AUC. Vergelijk de score altijd met een simpele baseline, bijvoorbeeld altijd het gemiddelde voorspellen. ### Kan ik BigQuery ML-modellen in productie gebruiken? Ja, je kunt `ML.PREDICT` direct in productiequeries gebruiken. Voor zeer hoge volumes, zoals miljoenen voorspellingen per dag, kun je Vertex AI overwegen omdat dat betere schaalbaarheid en aparte serving-opties biedt. ### Hoeveel trainingsdata heb ik nodig? Als vuistregel: minimaal duizend rijen voor eenvoudige modellen en tienduizend of meer rijen voor betere resultaten. BigQuery ML waarschuwt als de dataset te klein is voor betrouwbare uitkomsten. ### Wat kost het om een model te trainen? Training van ingebouwde modellen wordt afgerekend per verwerkte TiB, tegen een hoger tarief dan een gewone query. Voorspellingen met die modellen rekenen meestal op het standaard on-demand tarief. Externe modellen via Vertex AI hebben een eigen prijsstructuur. Controleer de actuele BigQuery-prijspagina voordat je grote modellen traint. ### Kan ik Gemini of andere AI-modellen aanroepen vanuit SQL? Ja. Via een remote model met `CREATE MODEL` kun je Gemini en andere ondersteunde LLM's aanroepen vanuit BigQuery, bijvoorbeeld om tekst te classificeren, samen te vatten of te genereren. Dit verloopt via een Vertex AI-verbinding. :::