Obtenir des insights sur les données à partir d'un modèle d'analyse des contributions

Dans ce tutoriel, vous allez utiliser un modèle d'analyse de la contribution pour analyser les changements de tarifs des taxis entre 2011 et 2012 à New York. Ce tutoriel vous guide à travers les tâches suivantes :

  • Créer une table d'entrée basée sur des données de taxi accessibles au public
  • Créer un modèle d'analyse des contributions qui utilise une métrique additionnable. Ce type de modèle résume une métrique donnée pour une combinaison d'une ou plusieurs dimensions dans les données, afin de déterminer la contribution de ces dimensions à la valeur de la métrique.
  • Obtenez les insights sur les métriques du modèle à l'aide de la fonction ML.GET_INSIGHTS.

Avant de commencer ce tutoriel, vous devez connaître le cas d'utilisation de l'analyse des contributions.

Autorisations requises

  • Pour créer l'ensemble de données, vous devez disposer de l'autorisation Identity and Access Management (IAM) bigquery.datasets.create.

  • Pour créer le modèle, vous avez besoin des autorisations suivantes :

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
  • Pour exécuter une inférence, vous devez disposer des autorisations suivantes :

    • bigquery.models.getData
    • bigquery.jobs.create

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

  • BigQuery ML: You incur costs for the data that you process in BigQuery.

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Pour en savoir plus sur les tarifs de BigQuery, consultez la page Tarifs de BigQuery dans la documentation BigQuery.

Avant de commencer

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery API.

    Enable the API

Créer un ensemble de données

Vous allez créer un ensemble de données BigQuery pour stocker votre modèle de ML :

  1. Dans la console Google Cloud, accédez à la page "BigQuery".

    Accéder à la page "BigQuery"

  2. Dans le volet Explorateur, cliquez sur le nom de votre projet.

  3. Cliquez sur Afficher les actions > Créer un ensemble de données.

    Créer l'ensemble de données

  4. Sur la page Créer un ensemble de données, procédez comme suit :

    • Dans le champ ID de l'ensemble de données, saisissez bqml_tutorial.

    • Pour Type d'emplacement, sélectionnez Multirégional, puis sélectionnez US (plusieurs régions aux États-Unis).

      Les ensembles de données publics sont stockés dans l'emplacement multirégional US. Par souci de simplicité, stockez votre ensemble de données dans le même emplacement.

    • Conservez les autres paramètres par défaut, puis cliquez sur Créer un ensemble de données.

      Créer une page d'ensemble de données

Créer une table de données d'entrée

Créez une table contenant des données de test et de contrôle à analyser. La requête suivante crée deux tables intermédiaires, une table de test avec des données de taxi de 2012 et une table de contrôle avec des données de taxi de 2011, puis effectue une union des tables intermédiaires pour créer une table avec des lignes de test et de contrôle et le même ensemble de colonnes.

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, exécutez l'instruction suivante :

    CREATE OR REPLACE TABLE bqml_tutorial.taxi_control_and_test
    AS (
      SELECT
        vendor_id,
        passenger_count,
        payment_type,
        pickup_location_id,
        EXTRACT(MONTH FROM pickup_datetime) AS month,
        AVG(total_amount) AS avg_total_fare,
        FALSE AS is_test
      FROM `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2011`
      WHERE total_amount > 0
      GROUP BY vendor_id, passenger_count, payment_type, pickup_location_id, month, is_test
    )
    UNION ALL
    (
      SELECT
        vendor_id,
        passenger_count,
        payment_type,
        pickup_location_id,
        EXTRACT(MONTH FROM pickup_datetime) AS month,
        AVG(total_amount) AS avg_total_fare,
        TRUE AS is_test
      FROM `bigquery-public-data.new_york_taxi_trips.tlc_yellow_trips_2012`
      WHERE total_amount > 0
      GROUP BY vendor_id, passenger_count, payment_type, pickup_location_id, month, is_test
    );

Créer le modèle

Créez un modèle d'analyse des contributions :

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, exécutez l'instruction suivante :

    CREATE OR REPLACE MODEL `bqml_tutorial.taxi_contribution_analysis_model`
      OPTIONS (
        MODEL_TYPE = 'CONTRIBUTION_ANALYSIS',
        CONTRIBUTION_METRIC = 'SUM(avg_total_fare)',
        DIMENSION_ID_COLS =
          ['vendor_id', 'passenger_count', 'pickup_location_id', 'payment_type', 'month'],
        IS_TEST_COL = 'is_test',
        MIN_APRIORI_SUPPORT = 0.05)
    AS
    SELECT * FROM bqml_tutorial.taxi_control_and_test;

L'exécution de la requête prend environ 20 secondes, après quoi le modèle taxi_contribution_analysis_model apparaît dans l'ensemble de données bqml_tutorial dans le volet Explorateur. Étant donné que la requête utilise une instruction CREATE MODEL pour créer un modèle, il n'y a aucun résultat de requête.

Obtenir des insights à partir du modèle

Obtenez des insights générés par le modèle d'analyse des contributions à l'aide de la fonction ML.GET_INSIGHTS.

  1. Dans la console Google Cloud, accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, exécutez l'instruction suivante :

    SELECT
      contributors,
      metric_test,
      metric_control,
      difference,
      relative_difference,
      unexpected_difference,
      relative_unexpected_difference,
      apriori_support
    FROM
      ML.GET_INSIGHTS(
        MODEL `bqml_tutorial.taxi_contribution_analysis_model`)
    WHERE relative_difference IS NOT NULL
    ORDER BY unexpected_difference DESC;

    La clause WHERE exclut les résultats des contributeurs présents dans l'ensemble de test, mais pas dans l'ensemble de contrôle.

    Si vous aviez utilisé SELECT * au lieu de spécifier des colonnes dans l'instruction SELECT de la fonction, la sortie inclurait également les colonnes de dimension spécifiées dans l'option DIMENSION_ID_COLS de l'instruction CREATE MODEL.

    Les premières lignes de la sortie doivent se présenter comme suit :

    +-------------------------------------------------------------+------------------+------------------+------------------+---------------------+-----------------------+--------------------------------+-----------------+
    |                        contributors                         |   metric_test    |  metric_control  |    difference    | relative_difference | unexpected_difference | relative_unexpected_difference | apriori_support |
    +-------------------------------------------------------------+------------------+------------------+------------------+---------------------+-----------------------+--------------------------------+-----------------+
    | ["payment_type=5"]                                          |   82996.99307095 |           138.26 |   82858.73307095 |       599.296492629 |       82825.246757081 |                  482.253417818 |     0.063593301 |
    +-------------------------------------------------------------+------------------+------------------+------------------+---------------------+-----------------------+--------------------------------+-----------------+
    | ["vendor_id=1"]                                             | 651674.026105812 | 475749.798118647 | 175924.227987165 |         0.369783085 |        39985.82041025 |                    0.065369611 |     0.499320531 |
    +-------------------------------------------------------------+------------------+------------------+------------------+---------------------+-----------------------+--------------------------------+-----------------+
    | ["passenger_count=1"]                                       | 304615.252142054 | 214839.058249037 |  89776.193893017 |         0.417876501 |       25149.907437652 |                     0.08999294 |     0.233399895 |
    +-------------------------------------------------------------+------------------+------------------+------------------+---------------------+-----------------------+--------------------------------+-----------------+
    | ["passenger_count=6"]                                       | 106980.236314059 | 64751.247894565  |  42228.988419494 |          0.65217258 |       22582.018639759 |                    0.267565108 |     0.081969553 |
    +-------------------------------------------------------------+------------------+------------------+------------------+---------------------+-----------------------+--------------------------------+-----------------+
    | ["vendor_id=1","passenger_count=1"]                         |     169184.64374 | 114583.997774386 |  54600.645965614 |         0.476511965 |       19471.037967023 |                    0.130055237 |     0.129631323 |
    +-------------------------------------------------------------+------------------+------------------+------------------+---------------------+-----------------------+--------------------------------+-----------------+
    

    Étant donné que vous avez effectué une analyse des contributions sur une métrique cumulable, les résultats contiennent les colonnes de sortie de métriques cumulables.

Effectuer un nettoyage

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.