Les régressions linéaires et logistiques sont des modèles de machine learning qui permettent de générer des prédictions significatives à partir de données publicitaires.
- La régression linéaire crée une fonction permettant d'ajuster une ligne aux données de façon à minimiser la distance entre les points de données et la ligne. Ce modèle peut ensuite être utilisé pour prédire une valeur numérique en fonction d'entrées, telles que la valeur vie d'un utilisateur en fonction des achats, des interactions antérieures, etc.
- La régression logistique est utilisée pour les problèmes de classification prédictive. Le modèle peut être de deux types, selon le nombre de variables que vous fournissez :
- La régression logistique binaire répond à une question "oui/non" (par exemple, la probabilité qu'un événement de conversion se produise).
- La régression logistique multiclasse permet de prédire plusieurs valeurs possibles (par exemple, si un client présente une "valeur faible", une "valeur moyenne" ou une "valeur élevée").
La régression linéaire et la régression logistique apprennent toutes deux à partir de données d'entraînement (ici, vos données publicitaires), offrant ainsi un modèle prédictif pour prendre des décisions publicitaires. En règle générale, plus vous fournissez de données de grande qualité, plus vous améliorez la précision de votre modèle. Les deux modèles offrent de meilleures performances lorsqu'ils reçoivent des données d'entraînement regroupées efficacement.
Confidentialité différentielle
La régression linéaire et la régression logistique utilisent toutes deux la confidentialité différentielle qui est un système de contrôle de la confidentialité différent de celui utilisé par les autres opérations dans Ads Data Hub. La confidentialité différentielle s'assure de la confidentialité des utilisateurs finaux en injectant du bruit dans vos résultats pendant le processus d'entraînement. Ce niveau de bruit est suffisamment faible pour que les résultats restent utiles, mais suffisamment élevé pour que les utilisateurs finaux ne puissent pas être identifiés. De plus, le niveau de bruit n'est pas déterministe, de sorte que les résultats présentent un niveau de bruit incohérent, permettant ainsi de mieux préserver la confidentialité de l'utilisateur final.
Limitation des requêtes
Vous êtes limité à 100 requêtes de modélisation de la régression logistique et linéaire par "jour de données" lorsque vous utilisez le EPSILON_PER_MODEL
par défaut. Un jour de données correspond aux événements générés au cours d'une journée spécifique. Ces événements correspondent aux dates de début et de fin que vous indiquez lors de l'exécution de votre requête, ainsi qu'à celles servant lors de la création des tables utilisées par votre requête (par exemple, les tables temporaires utilisées pour l'entraînement). Autrement dit, les données d'un même jour ne peuvent pas être utilisées dans plus de 100 modèles. Si vous choisissez une valeur supérieure à la valeur par défaut pour EPSILON_PER_MODEL, vous pourrez créer moins de modèles, mais ils seront de meilleure qualité. Si vous choisissez des valeurs inférieures pour EPSILON_PER_MODEL, vous pourrez entraîner un plus grand nombre de modèles, mais ils seront de moins bonne qualité.
Fonctionnement
Le processus comprend les étapes essentielles suivantes :
- Préparer les données d'entraînement
- Créer un modèle
- Collecter des insights à partir du modèle
Préparer les données d'entraînement
Comme indiqué ci-dessus, vous obtiendrez généralement de meilleurs résultats si vous utilisez des ensembles de données volumineux et de haute qualité. De plus, étant donné que les données d'entrée sont mises à l'échelle selon la méthode min-max, les données faiblement groupées ou celles qui présentent des anomalies importantes peuvent affecter le modèle en déplaçant la moyenne.
Par défaut, Ads Data Hub sélectionne aléatoirement 18 % de vos données d'entraînement à utiliser pour la validation. Le pourcentage de données utilisé pour la validation peut être contrôlé par l'option data_split_eval_fraction
.
Créer un modèle
Spécifiez les paramètres et les données d'entrée pour l'entraînement de votre modèle.
Bonnes pratiques
L'un des facteurs les plus importants dans la qualité d'un modèle est la taille de l'ensemble d'entraînement. Cependant, le compromis entre taille et qualité varie en fonction du problème et des facteurs présentés ci-dessous. Faites-nous part de votre expérience.
- Nous avons constaté une justesse supérieure à 0,70 pour les modèles de régression logistique créés à partir d'ensembles d'entraînement comptant au moins 100 000 utilisateurs.
- Nous avons constaté que le coefficient de détermination (r-carré) est supérieur à 0,70 pour les modèles de régression linéaire créés à partir d'ensembles d'entraînement comptant au moins 800 000 utilisateurs.
D'autres facteurs peuvent réduire la qualité d'un modèle.
- Modèles logistiques dans lesquels une classe est beaucoup plus représentée que les autres. Plus précisément, lorsqu'une étiquette comporte peu d'utilisateurs dans l'ensemble d'entraînement, le fait de disposer d'un grand nombre d'utilisateurs dans l'ensemble d'entraînement avec d'autres étiquettes ne sera probablement pas très utile pour la justesse du modèle sur une petite étiquette. Par exemple, il est moins intéressant de disposer de 20 000 et 1 000 utilisateurs dans l'ensemble d'entraînement pour deux étiquettes que de 10 000 et 2 000.
- Données de caractéristiques qui ne fournissent pas de signal fort aux étiquettes.
- Données brutes nécessitant une extraction de caractéristiques plus approfondie. Par exemple, certains champs peuvent avoir un très grand nombre de valeurs possibles. Pour améliorer les données de ce type, vous pouvez transformer les valeurs en une caractéristique avec un plus petit nombre de catégories ou de buckets.
Collecter des insights
Vous pouvez appeler des fonctions pour évaluer les performances de votre modèle sur les données de validation, inspecter des caractéristiques et des informations sur les itérations d'entraînement (comme les pondérations sous-jacentes utilisées par un modèle pendant la prédiction) et générer des prédictions sur des données inconnues.
Instruction CREATE MODEL
L'instruction CREATE MODEL
crée un modèle avec le nom et l'ensemble de données que vous spécifiez. Si le nom du modèle existe déjà, CREATE MODEL
remplace le modèle existant.
Syntaxe de CREATE MODEL
CREATE MODEL
model_name
OPTIONS
(
// model_option_list:
// Required parameter.
MODEL_TYPE = { 'ADH_LINEAR_REGRESSION' | 'ADH_LOGISTIC_REGRESSION'}
// Optional tuning parameters.
[, L1_REG = float64_value ]
[, L2_REG = float64_value ]
[, DATA_SPLIT_EVAL_FRACTION = float64_value ]
[, OPTIMIZE_STRATEGY = { 'AUTO_STRATEGY' | 'BATCH_GRADIENT_DESCENT' |
'NORMAL_EQUATION' } ]
[, MAX_ITERATIONS = int64_value ]
[, LEARN_RATE_STRATEGY = { 'LINE_SEARCH' | 'CONSTANT' } ]
[, LEARN_RATE = float64_value ]
[, EARLY_STOP = { TRUE | FALSE } ]
[, MIN_REL_PROGRESS = float64_value ]
[, LS_INIT_LEARN_RATE = float64_value ]
[, EPSILON_PER_MODEL = float64_value ]
[, AUTOMATIC_IMPUT_SCALING = bool_value ]
[, MIN_MAX_SCALED_COLS = [string_value, string_value... ] ]
[, STANDARD_SCALED_COLS = [string_value, string_value... ] ]
[, QUANTILE_BUCKETIZED_COLS = [
STRUCT(string_value AS col_name, int64_value AS num_buckets),
STRUCT(string_value AS col_name, int64_value AS num_buckets)... ] ]
)
AS query_statement
model_name
Nom alphanumérique, pouvant comprendre des traits de soulignement et des tirets. Il ne peut pas contenir de point. Si le nom de modèle fourni existe déjà, l'ancien modèle sera remplacé.
query_statement
Spécifie la requête SQL standard permettant de générer les données d'entraînement. Si vous créez plusieurs modèles à l'aide des mêmes données d'entraînement, créez une table temporaire avec les données d'entraînement et référencez-la ici. Cette méthode évite les erreurs potentielles de vérification des différences dues à l'effacement ou au spam ultérieur.
model_option_list
model_type
(Obligatoire) Seule option obligatoire. Il peut s'agir de adh_linear_regression
ou adh_logistic_regression
.
l1_reg
(Facultatif) La quantité de régularisation L1 appliquée. La régularisation L1 pénalise les pondérations proportionnellement à la somme de leurs valeurs absolues. Peut être tout nombre non négatif. La valeur par défaut est zéro.
l2_reg
(Facultatif) La quantité de régularisation L2 appliquée. La régularisation L2 pénalise les pondérations proportionnellement à la racine carrée de la somme des carrés des pondérations. Peut être tout nombre non négatif. La valeur par défaut est zéro.
data_split_eval_fraction
(Facultatif) Doit être comprise entre 0,01 et 0,99, la valeur par défaut étant 0,18. Détermine la fraction des données qui se trouve dans l'ensemble d'évaluation. Cela affecte la justesse du modèle en réduisant le nombre de lignes qu'il finit par comporter, mais augmente également le nombre de modèles qu'un utilisateur peut exécuter. Voici un graphique de cette relation en supposant que CHAQUE modèle sur un ensemble de données spécifique présente la même fraction :
Fraction de validation | Requêtes autorisées |
---|---|
0,01 | 7 |
0,1 | 8 |
0,15 | 8 |
0,18 | 9 |
0,2 | 9 |
0,3 | 10 |
0,5 | 14 |
0,9 | 50 |
optimize_strategy
(Facultatif) La stratégie d'entraînement des modèles de régression linéaire.
Arguments
AUTO_STRATEGY
détermine la stratégie d'entraînement comme suit :
- Si
l1_reg
ouwarm_start
est spécifié, la stratégiebatch_gradient_descent
est utilisée. - Si le nombre total de cardinalités des caractéristiques d'entraînement est supérieur à 10 000, la stratégie
batch_gradient_descent
est utilisée. - En cas de surapprentissage (le nombre d'exemples d'entraînement est inférieur à 10 • la cardinalité totale), la stratégie
batch_gradient_descent
est utilisée. - La stratégie
NORMAL_EQUATION
est utilisée dans tous les autres cas.
BATCH_GRADIENT_DESCENT
(logistique uniquement) entraîne le modèle à l'aide de la méthode de descente de gradient de lot, qui optimise la fonction de perte à l'aide de la fonction de gradient.
NORMAL_EQUATION
(linéaire uniquement) calcule directement la solution des moindre carrés pour résoudre le problème de régression linéaire avec la formule analytique. L'équation normale ne peut pas être utilisée dans les cas suivants :
l1_reg
est spécifié.warm_start
est spécifié.- La cardinalité totale des caractéristiques d'entraînement est supérieure à 10 000.
- La valeur par défaut est
AUTO_STRATEGY
.
max_iterations
(Facultatif) Nombre d'itérations ou d'étapes d'entraînement. Étant donné que cette requête crée un arbre pour chaque itération, il s'agit également du nombre d'arbres. Doit être un entier supérieur à 1. Valeur par défaut : 20.
learn_rate_strategy
(Facultatif, logistique uniquement) Stratégie permettant de spécifier le taux d'apprentissage lors de l'entraînement.
Arguments
LINE_SEARCH
utilise la méthode de recherche par ligne pour calculer le taux d'apprentissage. Le taux d'apprentissage initial pour la recherche par ligne correspond à la valeur spécifiée pour LS_INIT_LEARN_RATE
.
- La recherche par ligne ralentit l'entraînement et augmente le nombre d'octets traités. Toutefois, elle a tendance à converger, même avec un taux d'apprentissage initial spécifié supérieur.
CONSTANT
définit le taux d'apprentissage sur la valeur spécifiée pour LEARN_RATE
.
La valeur par défaut est LINE_SEARCH
.
learn_rate
(Facultatif, logistique uniquement) Taux d'apprentissage pour la descente de gradient lorsque LEARN_RATE_STRATEGY
est défini sur CONSTANT
. Si LEARN_RATE_STRATEGY
est défini sur LINE_SEARCH
, une erreur est renvoyée.
Arguments
float64_value
peut être n'importe quel nombre à virgule flottante de 64 bits. Valeur par défaut : 0,1 (10 %).
early_stop
(Facultatif) Indique si l'entraînement doit s'arrêter après la première itération pour laquelle l'amélioration de la perte relative est inférieure à la valeur spécifiée pour MIN_REL_PROGRESS
.
Arguments
TRUE
pour "oui", FALSE
pour "non". Valeur par défaut : TRUE
.
min_rel_progress
(Facultatif) Valeur minimale de l'amélioration de la perte relative nécessaire pour poursuivre l'entraînement lorsque EARLY_STOP
est défini sur "true". Par exemple, une valeur de 0,01 spécifie que chaque itération doit réduire la perte de 1 % pour que l'entraînement persiste.
Arguments
float64_value
peut être n'importe quel nombre à virgule flottante de 64 bits. Valeur par défaut : 0,1 (10 %).
ls_init_learn_rate
(Facultatif) Définit le taux d'apprentissage initial utilisé par LEARN_RATE_STRATEGY='LINE_SEARCH'
. Cette option ne peut être utilisée que si LINE_SEARCH
est spécifié.
Si le LEARN_RATE
du modèle semble doubler à chaque itération, comme indiqué par ML.TRAINING_INFO
, essayez de définir LS_INIT_LEARN_RATE
sur le dernier taux d'apprentissage ayant été doublé. Le taux d'apprentissage initial optimal diffère selon chaque modèle. Un taux d'apprentissage initial adéquat pour un modèle peut être un taux d'apprentissage initial inadapté pour un autre modèle.
Arguments
float64_value
peut être n'importe quel nombre à virgule flottante de 64 bits.
epsilon_per_model
(Facultatif) Spécifie la quantité du budget Privacy Budget à utiliser pour l'entraînement de ce modèle. Chaque client Ads Data se voit attribuer un budget Privacy Budget de 10,0 par jour de données. Un modèle entraîné avec succès utilisera EPSILON_PER_MODEL du budget pour chaque jour de données au cours de la période spécifiée lors de l'exécution de la requête. En utilisant la valeur par défaut de ln(3)/10, cela permettra de créer environ 100 modèles. Si vous utilisez une valeur plus élevée, vous pourrez créer moins de modèles, mais ils seront de meilleure qualité. Si vous utilisez une valeur inférieure, vous pourrez créer davantage de modèles de qualité inférieure.
Arguments
float64_value
peut être n'importe quel nombre positif à virgule flottante de 64 bits inférieur à ln(3), qui correspond à environ 1,0986. La valeur par défaut est ln(3)/10.
automatic_input_scaling
(Facultatif) Si la valeur est définie sur TRUE
, min_max_scaling
est automatiquement appliqué à toutes les colonnes de caractéristiques numériques, comme si les noms de colonnes étaient explicitement appelés dans l'option min_max_scaled_cols
, à l'exception des colonnes ayant été explicitement appelées dans les options standard_scaled_cols
ou quantile_bucketized_cols
.
Arguments
bool_value
est de type BOOL
. Valeur par défaut : TRUE
.
min_max_scaled_cols
(Facultatif) Met à l'échelle chacune des colonnes de caractéristiques numerical_expression spécifiées dans une plage de 0 à 1, avec un plafonnement à MIN
et MAX
sur toutes les lignes.
Les mêmes valeurs MIN
et MAX
sont automatiquement utilisées dans la prédiction. Si les données de prédiction se situent en dehors de la plage [MIN
, MAX
], elles sont limitées à 0 ou 1.
Arguments
Tableau de string_value
, où chaque string_value
est de type STRING et représente le nom de la colonne à transformer.
standard_scaled_cols
(Facultatif) Standardise les colonnes de caractéristiques numerical_expression
spécifiées sur toutes les lignes.
Les valeurs STDDEV
et MEAN
calculées pour standardiser l'expression sont automatiquement utilisés dans la prédiction.
Arguments
Tableau de string_value
, où chaque string_value
est de type STRING
et représente le nom de la colonne à transformer.
quantile_bucketized_cols
Répartit en buckets les colonnes de caractéristiques numériques continues spécifiées sous la forme d'une STRING
avec le nom du bucket comme valeur basée sur les quantiles.
Les mêmes quantiles sont automatiquement utilisés dans la prédiction.
Arguments
Tableau de STRUCT(string_value AS col_name, int64_value AS num_buckets)
, où chaque string_value est une valeur de type STRING
représentant le nom de la colonne numérique continue à transformer et chaque int64_value
correspond au nombre de bins dans lesquels diviser les valeurs numériques.
Validation
- Chaque jour de données de la période spécifiée pour cette requête doit disposer d'un budget Privacy Budget suffisant, c'est-à-dire plus de EPSILON_PER_MODEL, sans quoi la requête échouera.
- S'ils sont spécifiés, les paramètres de réglage facultatifs seront validés pour les périodes indiquées au-dessus.
- Seul le paramètre model_type obligatoire doit être spécifié explicitement.
- Une colonne de l'ensemble d'entraînement doit être nommée "label". Il n'est actuellement pas possible d'utiliser plusieurs étiquettes.
- La colonne d'étiquette ne peut pas contenir de valeurs NULL. Si la colonne d'étiquette comporte des valeurs NULL, la requête échoue.
- Aucune des colonnes de caractéristiques ne peut être dérivée de l'user_id.
- Chaque ligne doit représenter exactement un utilisateur unique. Une ligne ne peut pas représenter des données de plusieurs utilisateurs. Cela peut se produire avec certaines jointures, par exemple une jointure croisée (CROSS JOIN).
- Aucun utilisateur ne peut figurer sur deux lignes distinctes.
- Pour des raisons de confidentialité, seules les options décrites dans la section de syntaxe sont utilisables. Les autres options disponibles dans la documentation sur la requête BQML CREATE MODEL ne sont actuellement pas acceptées.
Fonctions d'évaluation
ML.EVALUATE
La fonction ML.EVALUATE
permet d'évaluer les métriques du modèle. La fonction ML.EVALUATE
peut être utilisée avec des modèles de régression linéaire ou de régression logistique.
SELECT
*
FROM ML.EVALUATE(MODEL `linear_model_test`);
ML.ROC_CURVE
La fonction ML.ROC_CURVE
permet d'évaluer les métriques spécifiques à la régression logistique. ML.ROC_CURVE
ne permet d'évaluer que les modèles de régression logistique.
SELECT
*
FROM ML.ROC_CURVE(MODEL `logistic_model_test`);
Fonctions de prédiction
ML.PREDICT
La fonction ML.PREDICT
permet de prédire les résultats à l'aide du modèle. Les résultats obtenus avec ML.PREDICT
sont soumis aux mêmes contrôles de confidentialité que les autres résultats dans Ads Data Hub. En savoir plus sur les contrôles de confidentialité
Régression linéaire
/* This example outputs the average value for labels that the model predicted */
SELECT
AVG(predicted_label) AS average_predicted_label
FROM
ML.PREDICT(MODEL `linear_model_test`, TABLE tmp.linear_training_set);
Régression logistique
/* This example outputs the model's prediction and probabilities for said prediction over individual users. It groups by label and prediction, counting the number of users in each prediction */
SELECT
label,
predicted_label, /* one of the two input labels, depending on which label has the higher predicted probability */
COUNT(*) AS num /* a tally of users */
FROM
ML.PREDICT(MODEL `logistic_model_test`, TABLE tmp.logistic_training_set)
GROUP BY 1, 2;
Fonctions d'inspection de modèles et de caractéristiques
ML.TRAINING_INFO
La fonction ML.TRAINING_INFO
vous permet d'afficher des informations sur les itérations d'entraînement d'un modèle.
SELECT
*
FROM ML.TRAINING_INFO(MODEL `logistic_model_test`);
ML.FEATURE_INFO
La fonction ML.FEATURE_INFO
vous permet d'afficher des informations sur les caractéristiques d'entrée nécessaires à l'entraînement d'un modèle.
SELECT
*
FROM ML.FEATURE_INFO(MODEL `logistic_model_test`);
ML.WEIGHTS
La fonction ML.WEIGHTS
vous permet d'afficher les pondérations sous-jacentes utilisées par un modèle lors de la prédiction.
SELECT
*
FROM ML.WEIGHTS(MODEL `linear_model_test`);
Exemples
Créer un modèle
Les exemples suivants utilisent tous l'exemple de table natality
pour montrer comment créer un modèle.
Données d'entraînement dans la sélection interne (linéaire)
L'exemple suivant utilise le poids de naissance, le genre, les semaines de gestation, l'âge de la mère et l'origine ethnique de la mère pour prédire le poids de naissance d'un enfant.
CREATE MODEL `natality_model`
OPTIONS
(model_type='adh_linear_regression') AS
SELECT
weight_pounds as label,
is_male,
gestation_weeks,
mother_age,
CAST(mother_race AS string) AS mother_race
FROM
`bigquery-public-data.samples.natality`
WHERE
weight_pounds IS NOT NULL
Données d'entraînement dans la sélection interne (logistique)
L'exemple suivant utilise le poids de naissance, le genre, les semaines de gestation, l'âge de la mère et l'origine ethnique de la mère pour prédire le genre d'un enfant.
CREATE MODEL `natality_model`
OPTIONS
(model_type='adh_logistic_regression') AS
SELECT
weight_pounds,
is_male as label,
gestation_weeks,
mother_age,
CAST(mother_race AS string) AS mother_race
FROM
`bigquery-public-data.samples.natality`
WHERE
weight_pounds IS NOT NULL
Activation d'audience
Vous pouvez effectuer des prédictions à l'aide d'un modèle de régression linéaire existant, avec des pondérations connues, sans utiliser ML.PREDICT
, même sans accéder au modèle. Pour en savoir plus, consultez l'atelier de programmation sur la modélisation de la régression pour l'activation d'audience.