arrow_back

Prédire le prix d'une course en taxi à l'aide d'un modèle de prévision BigQuery ML (apprentissage automatique)

Prédire le prix d'une course en taxi à l'aide d'un modèle de prévision BigQuery ML (apprentissage automatique)

1 heure 1 crédit

result.png

GSP246

Google Cloud – Ateliers adaptés au rythme de chacun

Aperçu

BigQuery est la base de données d'analyse de Google. Économique et entièrement gérée, elle ne nécessite aucune opération (NoOps). Grâce à BigQuery, vous pouvez interroger plusieurs téraoctets de données sans avoir à gérer d'infrastructure ni faire appel à un administrateur de base de données.

BigQuery Machine Learning BQML est l'endroit où les analystes de données peuvent créer, former, évaluer et prédire avec des modèles d'apprentissage automatique avec un codage minimal.

Dans cet atelier, vous découvrirez des millions de trajets en taxi jaune à New York disponibles dans un ensemble de données public BigQuery. Vous allez ensuite créer un modèle de machine learning dans BigQuery pour prédire le tarif du trajet en taxi en fonction des entrées de votre modèle. Enfin, vous évaluerez les performances de votre modèle et ferez des prédictions avec celui-ci.

Objectifs

Dans cet atelier, vous apprendrez à effectuer les opérations suivantes :

  • Utiliser BigQuery pour rechercher des ensembles de données publics
  • Interroger et examiner l'ensemble de données public relatif aux taxis
  • Créer un ensemble de données d'entraînement et d'évaluation pour la prédiction par lot
  • Créer un modèle de prévision (de type régression linéaire) dans BQML
  • Évaluer les performances de votre modèle de machine learning

Prérequis

Configurer votre environnement

Avant de cliquer sur le bouton Start Lab (Démarrer l'atelier)

Lisez ces instructions. Les ateliers sont minutés, et vous ne pouvez pas les mettre en pause. Le minuteur, qui démarre lorsque vous cliquez sur Start Lab (Démarrer l'atelier), indique combien de temps les ressources Google Cloud resteront accessibles.

Cet atelier pratique Qwiklabs vous permet de suivre vous-même les activités dans un véritable environnement cloud, et non dans un environnement de simulation ou de démonstration. Des identifiants temporaires vous sont fournis pour vous permettre de vous connecter à Google Cloud le temps de l'atelier.

Conditions requises

Pour réaliser cet atelier, vous devez :

  • avoir accès à un navigateur Internet standard (nous vous recommandons d'utiliser Chrome) ;
  • disposer de suffisamment de temps pour réaliser l'atelier en une fois.

Remarque : Si vous possédez déjà votre propre compte ou projet Google Cloud, veillez à ne pas l'utiliser pour réaliser cet atelier.

Remarque : Si vous utilisez un appareil Chrome OS, exécutez cet atelier dans une fenêtre de navigation privée.

Démarrer l'atelier et se connecter à la console Google Cloud

  1. Cliquez sur le bouton Démarrer l'atelier. Si l'atelier est payant, un pop-up s'affiche pour vous permettre de sélectionner un mode de paiement. Sur la gauche, vous trouverez le panneau Détails concernant l'atelier, qui contient les éléments suivants :

    • Le bouton Ouvrir la console Google
    • Le temps restant
    • Les identifiants temporaires que vous devez utiliser pour cet atelier
    • Des informations complémentaires vous permettant d'effectuer l'atelier
  2. Cliquez sur Ouvrir la console Google. L'atelier lance les ressources, puis ouvre la page Se connecter dans un nouvel onglet.

    Conseil : Réorganisez les onglets dans des fenêtres distinctes, placées côte à côte.

    Remarque : Si la boîte de dialogue Sélectionner un compte s'affiche, cliquez sur Utiliser un autre compte.
  3. Si nécessaire, copiez le nom d'utilisateur inclus dans le panneau Détails concernant l'atelier et collez-le dans la boîte de dialogue Se connecter. Cliquez sur Suivant.

  4. Copiez le mot de passe inclus dans le panneau Détails concernant l'atelier et collez-le dans la boîte de dialogue de bienvenue. Cliquez sur Suivant.

    Important : Vous devez utiliser les identifiants fournis dans le panneau de gauche. Ne saisissez pas vos identifiants Google Cloud Skills Boost. Remarque : Si vous utilisez votre propre compte Google Cloud pour cet atelier, des frais supplémentaires peuvent vous être facturés.
  5. Accédez aux pages suivantes :

    • Acceptez les conditions d'utilisation.
    • N'ajoutez pas d'options de récupération ni d'authentification à deux facteurs (ce compte est temporaire).
    • Ne vous inscrivez pas aux essais offerts.

Après quelques instants, la console Cloud s'ouvre dans cet onglet.

Remarque : Vous pouvez afficher le menu qui contient la liste des produits et services Google Cloud en cliquant sur le menu de navigation en haut à gauche. Icône du menu de navigation

Ouvrir la console BigQuery

  1. Dans la console Google Cloud, sélectionnez le menu de navigation > BigQuery.

Le message Bienvenue sur BigQuery dans Cloud Console s'affiche. Il contient un lien vers le guide de démarrage rapide et les notes de version.

  1. Cliquez sur OK.

La console BigQuery s'ouvre.

Examiner les données relatives aux taxis new-yorkais

Question : Combien de courses les taxis jaunes ont-ils effectuées chaque mois en 2015 ?

Copiez et collez le code SQL suivant dans l'éditeur de requête :

#standardSQL
SELECT
  TIMESTAMP_TRUNC(pickup_datetime,
    MONTH) month,
  COUNT(*) trips
FROM
  `bigquery-public-data.new_york.tlc_yellow_trips_2015`
GROUP BY
  1
ORDER BY
  1

Ensuite, cliquez sur Run (Exécuter).

Vous devez obtenir le résultat suivant :

BQML_taxi_mo_trips.png

Comme vous pouvez le constater, en 2015, les taxis de New York ont effectué plus de 10 millions de courses chaque mois. Un chiffre considérable !

Tester la tâche terminée

Cliquez sur Check my progress (Vérifier ma progression) pour vérifier la tâche exécutée. Si votre tâche a bien été exécutée, vous recevez une note d'évaluation.

Calculer les courses effectuées chaque mois par les taxis jaunes en 2015

Question : Quelle était la vitesse moyenne des taxis jaunes en 2015 ?

Remplacez la requête précédente par celle qui suit, puis cliquez sur Run (Exécuter) :

#standardSQL
SELECT
  EXTRACT(HOUR
  FROM
    pickup_datetime) hour,
  ROUND(AVG(trip_distance / TIMESTAMP_DIFF(dropoff_datetime,
        pickup_datetime,
        SECOND))*3600, 1) speed
FROM
  `bigquery-public-data.new_york.tlc_yellow_trips_2015`
WHERE
  trip_distance > 0
  AND fare_amount/trip_distance BETWEEN 2
  AND 10
  AND dropoff_datetime > pickup_datetime
GROUP BY
  1
ORDER BY
  1

Vous devez obtenir le résultat suivant :

BQML_taxi_hr_speed.png

En journée, la vitesse moyenne est d'environ 18-19 km/h. Elle atteint 34 km/h à 5 h du matin, soit près du double. Cela semble logique, car la circulation est sans doute plus fluide à cette heure-là.

Tester la tâche terminée

Cliquez sur Check my progress (Vérifier ma progression) pour vérifier la tâche exécutée. Si votre tâche a bien été exécutée, vous recevez une note d'évaluation.

Calculer la vitesse moyenne des taxis jaunes en 2015

Identifier un objectif

Vous allez maintenant créer un modèle de machine learning dans BigQuery afin de prédire le prix d'une course à New York en vous basant sur un ensemble de données contenant l'historique des courses et les informations associées. Cela peut s'avérer très utile en termes de planification des trajets, pour le chauffeur comme pour l'agence de taxis.

Sélectionner des caractéristiques et créer l'ensemble de données d'entraînement

L'ensemble de données concernant les taxis jaunes new-yorkais est un ensemble de données public fourni par la ville. Il a été chargé dans BigQuery afin que vous puissiez l'examiner. Après avoir parcouru la liste complète des champs sur cette page, prévisualisez l'ensemble de données pour identifier les caractéristiques utiles qui permettront à votre modèle de machine learning de déterminer le lien entre les données concernant l'historique des courses en taxi et le prix de la course.

Votre équipe veut savoir si les champs suivants conviennent pour établir le modèle de prévision du prix d'une course :

  • Tarif des péages
  • Prix de la course
  • Heure de la journée
  • Adresse de départ
  • Adresse d'arrivée
  • Nombre de passagers

Remplacez la requête par le code suivant :

#standardSQL
WITH params AS (
    SELECT
    1 AS TRAIN,
    2 AS EVAL
    ),
  daynames AS
    (SELECT ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'] AS daysofweek),
  taxitrips AS (
  SELECT
    (tolls_amount + fare_amount) AS total_fare,
    daysofweek[ORDINAL(EXTRACT(DAYOFWEEK FROM pickup_datetime))] AS dayofweek,
    EXTRACT(HOUR FROM pickup_datetime) AS hourofday,
    pickup_longitude AS pickuplon,
    pickup_latitude AS pickuplat,
    dropoff_longitude AS dropofflon,
    dropoff_latitude AS dropofflat,
    passenger_count AS passengers
  FROM
    `nyc-tlc.yellow.trips`, daynames, params
  WHERE
    trip_distance > 0 AND fare_amount > 0
    AND MOD(ABS(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING))),1000) = params.TRAIN
  )
  SELECT *
  FROM taxitrips

Informations importantes concernant la requête :

  1. La partie principale de la requête se trouve à la fin : (SELECT * from taxitrips).
  2. L'essentiel de l'extraction depuis l'ensemble de données relatif aux taxis new-yorkais s'effectue grâce à taxitrips. La partie SELECT contient les caractéristiques d'entraînement et l'étiquette que vous avez définies.
  3. La partie WHERE permet d'exclure certaines données de l'entraînement.
  4. La partie WHERE inclut également une clause d'échantillonnage permettant de ne sélectionner que 1/1 000e des données.
  5. Définissez une variable nommée TRAIN qui vous permet de créer un ensemble EVAL indépendant.

Maintenant que vous comprenez mieux l'objectif de cette requête, cliquez sur Run (Exécuter).

Vous devriez obtenir un résultat semblable à celui-ci :

3784193f53252195.png

Quelle est l'étiquette (la réponse correcte) ?

total_fare (total de la course) est l'étiquette (ce que vous allez prédire). Ce champ découle de tolls_amount (tarif des péages) et de fare_amount (prix de la course). Vous pouvez donc ignorer les pourboires des clients dans le modèle étant donné qu'ils ne sont pas obligatoires.

Tester la tâche terminée

Cliquez sur Check my progress (Vérifier ma progression) pour vérifier la tâche exécutée. Si votre tâche a bien été exécutée, vous recevez une note d'évaluation.

Tester si les champs conviennent pour établir le modèle de prévision du prix d'une course

Créer un ensemble de données BigQuery pour y stocker vos modèles

Dans cette section, vous allez créer un ensemble de données BigQuery dans lequel stocker vos modèles de ML.

  1. Dans le panneau des ressources situé à gauche, sélectionnez l'ID de votre projet Qwiklabs.

  2. Cliquez ensuite sur l'icône Afficher les actions à côté de votre ID de projet et sélectionnez Créer un ensemble de données.

  3. Dans la boîte de dialogue "Create Dataset" (Créer un ensemble de données), saisissez les valeurs suivantes :

  • Dans le champ Dataset ID (ID de l'ensemble de données), saisissez taxi.
  • Conservez les valeurs par défaut dans les autres champs.

create-dataset.png

  1. Cliquez ensuite sur Create dataset (Créer un ensemble de données).

Tester la tâche terminée

Cliquez sur Check my progress (Vérifier ma progression) pour vérifier la tâche exécutée. Si votre tâche a bien été exécutée, vous recevez une note d'évaluation.

Créer un ensemble de données BigQuery pour y stocker vos modèles

Sélectionner un type de modèle BQML et définir les options correspondantes

Maintenant que vous avez sélectionné les caractéristiques de base, vous pouvez créer votre premier modèle de ML dans BigQuery.

Vous avez le choix entre plusieurs types de modèles :

  • Prévision de valeurs numériques comme les ventes des mois à venir, grâce à une régression linéaire (linear_reg).
  • Classification binaire ou multiclasse comme les emails indésirables ou non, grâce à la régression logistique (logistic_reg).
  • k-Means Clustering si vous souhaitez un apprentissage non supervisé pour l'exploration (kmeans).

Saisissez la requête suivante pour créer un modèle et définir ses options :

CREATE or REPLACE MODEL taxi.taxifare_model
OPTIONS
  (model_type='linear_reg', labels=['total_fare']) AS
WITH params AS (
    SELECT
    1 AS TRAIN,
    2 AS EVAL
    ),
  daynames AS
    (SELECT ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'] AS daysofweek),
  taxitrips AS (
  SELECT
    (tolls_amount + fare_amount) AS total_fare,
    daysofweek[ORDINAL(EXTRACT(DAYOFWEEK FROM pickup_datetime))] AS dayofweek,
    EXTRACT(HOUR FROM pickup_datetime) AS hourofday,
    pickup_longitude AS pickuplon,
    pickup_latitude AS pickuplat,
    dropoff_longitude AS dropofflon,
    dropoff_latitude AS dropofflat,
    passenger_count AS passengers
  FROM
    `nyc-tlc.yellow.trips`, daynames, params
  WHERE
    trip_distance > 0 AND fare_amount > 0
    AND MOD(ABS(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING))),1000) = params.TRAIN
  )
  SELECT *
  FROM taxitrips

Cliquez ensuite sur Run (Exécuter) pour entraîner le modèle.

Attendez que le modèle soit entraîné (5 à 10 minutes).

Une fois votre modèle entraîné, vous verrez le message "Cette instruction créera un nouveau modèle nommé qwiklabs-gcp-03-xxxxxxxx:taxi.taxifare_model." ce qui indique que votre modèle a été entraîné avec succès.

Vérifiez que le code taxifare_model apparaît bien dans l'ensemble de données relatif aux taxis :

taxifare.png

L'étape suivante consiste à évaluer les performances du modèle à partir de nouvelles données d'évaluation.

Tester la tâche terminée

Cliquez sur Check my progress (Vérifier ma progression) pour vérifier la tâche exécutée. Si votre tâche a bien été exécutée, vous recevez une note d'évaluation.

Créer un modèle "taxifare" (prix de la course)

Évaluer les performances du modèle de classification

Sélectionner vos critères de performance

Pour les modèles de type régression linéaire, vous devez utiliser une statistique de perte, à savoir la racine carrée de l'erreur quadratique moyenne (RMSE, Root Mean Square Error). L'objectif est de continuer à entraîner le modèle et à l'améliorer de manière que ce chiffre soit le plus bas possible.

Dans BQML, mean_squared_error est un champ pouvant faire l'objet de requêtes lors de l'évaluation de votre modèle de ML entraîné. Ajoutez SQRT() pour obtenir la valeur RMSE.

Maintenant que l'entraînement est terminé, vous pouvez évaluer les performances globales du modèle avec cette requête à l'aide de ML.EVALUATE. Copiez et collez le texte suivant dans l'éditeur de requêtes, puis cliquez sur Run (Exécuter) :

#standardSQL
SELECT
  SQRT(mean_squared_error) AS rmse
FROM
  ML.EVALUATE(MODEL taxi.taxifare_model,
  (
  WITH params AS (
    SELECT
    1 AS TRAIN,
    2 AS EVAL
    ),
  daynames AS
    (SELECT ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'] AS daysofweek),
  taxitrips AS (
  SELECT
    (tolls_amount + fare_amount) AS total_fare,
    daysofweek[ORDINAL(EXTRACT(DAYOFWEEK FROM pickup_datetime))] AS dayofweek,
    EXTRACT(HOUR FROM pickup_datetime) AS hourofday,
    pickup_longitude AS pickuplon,
    pickup_latitude AS pickuplat,
    dropoff_longitude AS dropofflon,
    dropoff_latitude AS dropofflat,
    passenger_count AS passengers
  FROM
    `nyc-tlc.yellow.trips`, daynames, params
  WHERE
    trip_distance > 0 AND fare_amount > 0
    AND MOD(ABS(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING))),1000) = params.EVAL
  )
  SELECT *
  FROM taxitrips
  ))

Vous évaluez désormais le modèle par rapport à différentes cours de taxi avec votre filtre params.EVAL.

Examinez les résultats après l'exécution du modèle. Il est normal que la valeur RMSE varie légèrement.

Ligne

rmse

1

9,477056435999074

Suite à l'évaluation du modèle, vous obtenez une RMSE de 9,47. Depuis que nous avons pris la racine de l'erreur quadratique moyenne (RMSE), l'erreur de 9,47 peut être évaluée dans les mêmes unités que le total_fare ; elle est donc de +- 9,47 $.

Cette statistique de perte peut s'avérer acceptable ou non pour produire ensuite le modèle. Tout dépend des critères d'analyse comparative définis en amont de la phase d'entraînement qui permettent de fixer un niveau minimal acceptable en termes de performances et de justesse.

Tester la tâche terminée

Cliquez sur Check my progress (Vérifier ma progression) pour vérifier la tâche exécutée. Si votre tâche a bien été exécutée, vous recevez une note d'évaluation.

Évaluer les performances du modèle de classification

Prédire le prix d'une course en taxi

Vous allez ensuite créer une requête afin de réaliser des prédictions à l'aide du nouveau modèle. Copiez et collez le texte suivant dans l'éditeur de requêtes, puis cliquez sur Run (Exécuter) :

#standardSQL
SELECT
*
FROM
  ml.PREDICT(MODEL `taxi.taxifare_model`,
   (
 WITH params AS (
    SELECT
    1 AS TRAIN,
    2 AS EVAL
    ),
  daynames AS
    (SELECT ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'] AS daysofweek),
  taxitrips AS (
  SELECT
    (tolls_amount + fare_amount) AS total_fare,
    daysofweek[ORDINAL(EXTRACT(DAYOFWEEK FROM pickup_datetime))] AS dayofweek,
    EXTRACT(HOUR FROM pickup_datetime) AS hourofday,
    pickup_longitude AS pickuplon,
    pickup_latitude AS pickuplat,
    dropoff_longitude AS dropofflon,
    dropoff_latitude AS dropofflat,
    passenger_count AS passengers
  FROM
    `nyc-tlc.yellow.trips`, daynames, params
  WHERE
    trip_distance > 0 AND fare_amount > 0
    AND MOD(ABS(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING))),1000) = params.EVAL
  )
  SELECT *
  FROM taxitrips
));

Les prédictions concernant le prix des courses s'affichent, avec les prix réels et d'autres caractéristiques liées à ces trajets. Vos résultats doivent ressembler à ce qui suit :

Prédictions de taxi

Tester la tâche terminée

Cliquez sur Check my progress (Vérifier ma progression) pour vérifier la tâche exécutée. Si votre tâche a bien été exécutée, vous recevez une note d'évaluation.

Prédire le prix d'une course en taxi

Améliorer le modèle avec l'extraction de caractéristiques

La création de modèles de machine learning est un processus itératif. Une fois que nous avons évalué les performances de notre modèle initial, nous allons régulièrement revenir dessus pour apporter des modifications aux caractéristiques et aux lignes afin de tenter de l'optimiser.

Filtrer l'ensemble de données d'entraînement

Examinons à présent les statistiques communes des prix de courses en taxi. Copiez et collez le texte suivant dans l'éditeur de requêtes, puis cliquez sur Run (Exécuter) :

SELECT
  COUNT(fare_amount) AS num_fares,
  MIN(fare_amount) AS low_fare,
  MAX(fare_amount) AS high_fare,
  AVG(fare_amount) AS avg_fare,
  STDDEV(fare_amount) AS stddev
FROM
`nyc-tlc.yellow.trips`
# 1,108,779,463 fares

Le résultat doit ressembler à ceci :

filter

Comme vous le voyez, l'ensemble de données comporte certaines anomalies (courses aux montants négatifs ou supérieurs à 50 000 $). Appuyons-nous sur notre expertise en la matière pour éviter que le modèle ne les prenne en compte.

Nous allons restreindre les données aux seuls tarifs compris entre 6 $ et 200 $. Copiez et collez le texte suivant dans l'éditeur de requêtes, puis cliquez sur Run (Exécuter) :

SELECT
  COUNT(fare_amount) AS num_fares,
  MIN(fare_amount) AS low_fare,
  MAX(fare_amount) AS high_fare,
  AVG(fare_amount) AS avg_fare,
  STDDEV(fare_amount) AS stddev
FROM
`nyc-tlc.yellow.trips`
WHERE trip_distance > 0 AND fare_amount BETWEEN 6 and 200
# 843,834,902 fares

Le résultat doit ressembler à ceci :

filter-two

Voilà qui est un peu mieux. Pendant que nous y sommes, limitons la distance parcourue afin de nous concentrer sur la ville de New York.

Copiez et collez le texte suivant dans l'éditeur de requêtes, puis cliquez sur Run (Exécuter) :

SELECT
  COUNT(fare_amount) AS num_fares,
  MIN(fare_amount) AS low_fare,
  MAX(fare_amount) AS high_fare,
  AVG(fare_amount) AS avg_fare,
  STDDEV(fare_amount) AS stddev
FROM
`nyc-tlc.yellow.trips`
WHERE trip_distance > 0 AND fare_amount BETWEEN 6 and 200
    AND pickup_longitude > -75 #limiting of the distance the taxis travel out
    AND pickup_longitude < -73
    AND dropoff_longitude > -75
    AND dropoff_longitude < -73
    AND pickup_latitude > 40
    AND pickup_latitude < 42
    AND dropoff_latitude > 40
    AND dropoff_latitude < 42
    # 827,365,869 fares

Le résultat doit ressembler à ceci :

filter-three

Vous disposez toujours d'un vaste ensemble de données d'entraînement du modèle, avec plus de 800 millions de trajets. Entraînons à nouveau le modèle avec ces nouvelles contraintes, et observons ses performances.

Recommencer l'entraînement du modèle

Appelons ce nouveau modèle taxi.taxifare_model_2 et entraînons à nouveau notre modèle de régression linéaire pour la prédiction du total des courses. Vous remarquez que vous avez également ajouté quelques caractéristiques calculées pour la distance euclidienne (ligne droite) entre la prise en charge et le dépôt.

Copiez et collez le texte suivant dans l'éditeur de requêtes, puis cliquez sur Run (Exécuter) :

CREATE OR REPLACE MODEL taxi.taxifare_model_2
OPTIONS
  (model_type='linear_reg', labels=['total_fare']) AS
WITH params AS (
    SELECT
    1 AS TRAIN,
    2 AS EVAL
    ),
  daynames AS
    (SELECT ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'] AS daysofweek),
  taxitrips AS (
  SELECT
    (tolls_amount + fare_amount) AS total_fare,
    daysofweek[ORDINAL(EXTRACT(DAYOFWEEK FROM pickup_datetime))] AS dayofweek,
    EXTRACT(HOUR FROM pickup_datetime) AS hourofday,
    SQRT(POW((pickup_longitude - dropoff_longitude),2) + POW(( pickup_latitude - dropoff_latitude), 2)) as dist, #Euclidean distance between pickup and drop off
    SQRT(POW((pickup_longitude - dropoff_longitude),2)) as longitude, #Euclidean distance between pickup and drop off in longitude
    SQRT(POW((pickup_latitude - dropoff_latitude), 2)) as latitude, #Euclidean distance between pickup and drop off in latitude
    passenger_count AS passengers
  FROM
    `nyc-tlc.yellow.trips`, daynames, params
WHERE trip_distance > 0 AND fare_amount BETWEEN 6 and 200
    AND pickup_longitude > -75 #limiting of the distance the taxis travel out
    AND pickup_longitude < -73
    AND dropoff_longitude > -75
    AND dropoff_longitude < -73
    AND pickup_latitude > 40
    AND pickup_latitude < 42
    AND dropoff_latitude > 40
    AND dropoff_latitude < 42
    AND MOD(ABS(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING))),1000) = params.TRAIN
  )
  SELECT *
  FROM taxitrips

Le réentraînement du modèle peut prendre quelques minutes. Vous pouvez passer à l'étape suivante lorsque vous recevez le message suivant dans la console :

result.png

Évaluer le nouveau modèle

Maintenant que nous avons optimisé notre modèle de régression linéaire, évaluons l'ensemble de données par rapport à ce modèle et observons ses performances. Copiez et collez le texte suivant dans l'éditeur de requêtes, puis cliquez sur Run (Exécuter) :

SELECT
  SQRT(mean_squared_error) AS rmse
FROM
  ML.EVALUATE(MODEL taxi.taxifare_model_2,
  (
  WITH params AS (
    SELECT
    1 AS TRAIN,
    2 AS EVAL
    ),
  daynames AS
    (SELECT ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'] AS daysofweek),
  taxitrips AS (
  SELECT
    (tolls_amount + fare_amount) AS total_fare,
    daysofweek[ORDINAL(EXTRACT(DAYOFWEEK FROM pickup_datetime))] AS dayofweek,
    EXTRACT(HOUR FROM pickup_datetime) AS hourofday,
    SQRT(POW((pickup_longitude - dropoff_longitude),2) + POW(( pickup_latitude - dropoff_latitude), 2)) as dist, #Euclidean distance between pickup and drop off
    SQRT(POW((pickup_longitude - dropoff_longitude),2)) as longitude, #Euclidean distance between pickup and drop off in longitude
    SQRT(POW((pickup_latitude - dropoff_latitude), 2)) as latitude, #Euclidean distance between pickup and drop off in latitude
    passenger_count AS passengers
  FROM
    `nyc-tlc.yellow.trips`, daynames, params
WHERE trip_distance > 0 AND fare_amount BETWEEN 6 and 200
    AND pickup_longitude > -75 #limiting of the distance the taxis travel out
    AND pickup_longitude < -73
    AND dropoff_longitude > -75
    AND dropoff_longitude < -73
    AND pickup_latitude > 40
    AND pickup_latitude < 42
    AND dropoff_latitude > 40
    AND dropoff_latitude < 42
    AND MOD(ABS(FARM_FINGERPRINT(CAST(pickup_datetime AS STRING))),1000) = params.EVAL
  )
  SELECT *
  FROM taxitrips
  ))

Le résultat doit ressembler à ceci :

retrained-model-out

Comme vous pouvez le constater, la RMSE avoisine à présent +-5,12 $, ce qui est nettement mieux que les +-9,47 $ obtenus pour votre premier modèle.

Dans la mesure où la RMSE définit l'écart-type des erreurs de prédiction, nous constatons que le réentraînement de la régression linéaire a considérablement accru la précision de notre modèle.

Tester vos connaissances

Voici quelques questions à choix multiples qui vous permettront de mieux maîtriser les concepts abordés lors de cet atelier. Répondez-y du mieux que vous le pouvez.

Autres ensembles de données à explorer

Cliquez sur le lien ci-dessous pour accéder au projet bigquery-public-data et découvrir la modélisation d'autres ensembles de données, par exemple pour prédire le montant d'une course en taxi à Chicago :

https://bigquery.cloud.google.com/table/bigquery-public-data::chicago_taxi_trips.taxi_trips

Félicitations !

Vous avez créé un modèle de ML dans BigQuery permettant de prédire le prix d'une course en taxi à New York.

Terminer votre quête

304e2d6238466ca2.png BigQueryBasicsforMachineLearning-125x135.png bq_retail_125.png

Cet atelier d'auto-formation fait partie des quêtes Qwiklabs Data Engineering et BigQuery for Machine Learning, Applying BQML's Classifcation, Regression, and Demand Forcasting for Retail Applications. Une quête est une série d'ateliers associés qui constituent une formation. Si vous terminez une quête, vous obtiendrez un badge attestant de votre réussite. Vous pouvez rendre publics les badges que vous recevez et ajouter leur lien dans votre CV en ligne ou sur vos comptes de réseaux sociaux. Inscrivez-vous à l'une de ces quêtes pour obtenir immédiatement les crédits associés à cet atelier si vous l'avez suivi. Découvrez les autres quêtes Qwiklabs disponibles.

Étapes suivantes et informations supplémentaires

Google Cloud Training & Certification

...helps you make the most of Google Cloud technologies. Our classes include technical skills and best practices to help you get up to speed quickly and continue your learning journey. We offer fundamental to advanced level training, with on-demand, live, and virtual options to suit your busy schedule. Certifications help you validate and prove your skill and expertise in Google Cloud technologies.

Dernière mise à jour du manuel : 31 août 2021
Dernier test de l'atelier : 3 avril 2020

Copyright 2020 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.