Analyser des séries temporelles financières avec BigQuery

Si vous occupez le poste d'analyste quantitatif, vous utilisez un éventail varié d'outils et de techniques pour explorer le big data, comme l'historique des opérations de marché, afin d'obtenir des informations permettant de mieux comprendre les tendances du marché. Étant donné que les cotes, les opérations et d'autres événements se produisent à des intervalles prévisibles, ces données représentent une série temporelle financière que vous pouvez analyser à l'aide de techniques éprouvées (par exemple, l'analyse de la fréquence et les moyennes mobiles).

Toutefois, le traitement d'ensembles de données volumineux peut s'avérer difficile. Les outils traditionnels peuvent ne pas s'adapter au développement continu de l'ensemble de données. Les exigences en matière de stockage peuvent croître aussi rapidement que l'ensemble de données. Le téléchargement de données sur le disque dur de votre ordinateur n'est donc plus une solution viable. De plus, la récupération des sous-ensembles de données appropriés à partir d'une requête de base de données classique peut prendre beaucoup de temps.

Google BigQuery résout ces problèmes, entre autres, en vous permettant d'exécuter des requêtes de type SQL sur des tables en mode "append-only", puis de renvoyer les résultats très rapidement grâce à la puissance de traitement de l'infrastructure de Google. Vous pouvez utiliser BigQuery sur le Web, sur la ligne de commande et via des API, y compris les API REST. Lorsqu'il est associé à d'autres composants de Google Cloud Platform, voire à des outils tiers, BigQuery vous permet de créer les solutions d'analyse de données dont vous avez besoin actuellement, tout en étant assuré de pouvoir faire évoluer vos solutions à l'avenir.

La sécurité est toujours importante lorsque vous travaillez sur des données financières. Google Cloud Platform permet d'assurer la protection, la sécurité et la confidentialité des données de plusieurs manières. Par exemple, toutes les données sont chiffrées pendant la transmission et au repos, et Cloud Platform est conforme aux normes ISO 27001, SOC3, FINRA et PCI.

Objectifs

  • Charger un ensemble de données dans BigQuery
  • Effectuer diverses requêtes de séries temporelles financières à l'aide de l'interface utilisateur Web de BigQuery
  • Visualiser les résultats des requêtes

Prérequis

  • Activez l'API BigQuery pour un projet de la console Google Cloud Platform.
  • Activez la facturation.
  • Installez le SDK Google Cloud sur votre système d'exploitation client.

Charger les exemples de données

Ce tutoriel utilise des données du marché des opérations de change au comptant, qui représentent les cotes des taux de change de devises internationales dans le temps. Ces valeurs enregistrent les prix proposés par les courtiers pour les types d'opérations sur devises survenant par exemple lorsque des personnes voyagent, lorsque de grandes institutions financières transfèrent des fonds entre des pays ou des régions, ou lorsque des spéculateurs cherchent à réaliser un profit en échangeant des devises. Les données sont au format suivant :

<venue>,
<from-currency>/<to-currency>,
<timestamp>,
<bid-price>,
<ask-price>

Toutes les cotes de l'exemple d'ensemble de données concernent des opérations de change entre la livre sterling (GBP) et le dollar américain (USD). Les horodatages sont toujours exprimés en heure moyenne de Greenwich (GMT) et les trois derniers chiffres sont toujours zéro, ce qui permet une résolution de la série temporelle à la milliseconde. Le cours acheteur représente ce que les acheteurs ont offert de payer pour la devise, tandis que le cours vendeur représente le prix que les vendeurs ont offert par unité.

Pour charger les exemples de données, procédez comme suit.

  1. Définissez le projet en cours. Dans une fenêtre de terminal, saisissez la commande suivante :

    gcloud config set project <your_project_id>
    
  2. Créez un ensemble de données dans BigQuery.

    bq mk timeseries
    
  3. Chargez les données à partir de deux fichiers CSV. Le premier contient les données de janvier 2014 et le second, celles de février. Le chargement de ces ensembles de données peut prendre un certain temps.

    bq load timeseries.gbpusd_0114 gs://solutions-public-assets/time-series-master/GBPUSD_2014_01.csv venue:STRING,currencies:STRING,time:TIMESTAMP,bid:FLOAT,ask:FLOAT
    
    bq load timeseries.gbpusd_0214 gs://solutions-public-assets/time-series-master/GBPUSD_2014_02.csv venue:STRING,currencies:STRING,time:TIMESTAMP,bid:FLOAT,ask:FLOAT
    
  4. Ouvrez l'interface utilisateur Web de BigQuery.

  5. Affichez le schéma de la table. Sous le nom du projet, développez l'ensemble de données timeseries, puis cliquez sur gbpusd_0114.

La figure suivante présente le schéma de la table gbpusd_0114. Celui de la table gbpusd_0214 est identique.

Détails de la table

Exécuter une requête pour obtenir les cotes de janvier

Commencez par des requêtes simples vous permettant de voir à quoi ressemblent les données de change.

  1. Dans l'interface Web BigQuery, cliquez sur Saisir une requête.

  2. Dans la zone de texte Nouvelle requête, saisissez la requête ci-après.

    SELECT
     venue,
     currencies,
     time,
     bid,
     ask
    FROM
     timeseries.gbpusd_0114
    ORDER BY
     time ASC
    LIMIT   1000;
    
  3. Cliquez sur Exécuter la requête.

    Prenez le temps de parcourir les données à l'aide des contrôles fournis par l'outil, tels que les liens Suivant et Précédent. Notez que le format des données dans la colonne time (heure) n'indique pas la résolution complète des données sous-jacentes, jusqu'aux millisecondes :

    2014-01-01 00:10:10 UTC
    
  4. Modifiez la requête pour utiliser une fonction intégrée permettant de reformater les données d'heure. Dans la zone de texte Nouvelle requête, modifiez la première partie de l'instruction SELECT comme suit.

    SELECT FORMAT_UTC_USEC(time) AS time,
    

    FORMAT_UTC_USEC est une fonction intégrée qui reformate les données d'heure en temps universel coordonné (UTC). BigQuery fournit de nombreuses fonctions intégrées facilitant l'interrogation d'ensembles de données volumineux.

  5. Cliquez sur Exécuter la requête pour voir les résultats. Les données sont maintenant au format UTC et indiquent la résolution complète de l'horodatage.

    2014-01-01 00:00:05.763000
    

Afficher les cours acheteurs pour une certaine période

Ensuite, modifiez la requête pour limiter les résultats à une période donnée. Cela générera un ensemble de résultats plus facile à gérer et pouvant être téléchargé rapidement sous forme de fichier CSV.

Dans la zone de texte Nouvelle requête, saisissez et exécutez la requête ci-après. Celle-ci limite les résultats à une période de 30 minutes le 1er janvier.

SELECT
  TIME(time) AS time,
  bid
FROM
  timeseries.gbpusd_0114
WHERE
  time BETWEEN TIMESTAMP("2014-01-01 00:00:00.000")
  AND TIMESTAMP("2014-01-01 00:29:59.999")
ORDER BY
  time ASC;

Notez que cette requête utilise la fonction TIME pour afficher un format d'heure abrégé. Comme vous savez que les résultats correspondent à un jour particulier, vous n'avez pas besoin d'afficher l'horodatage complet. Avec ce format, le graphique que vous créez à l'étape suivante aura un meilleur rendu.

Vous pouvez visualiser ces données en téléchargeant les résultats sous la forme d'un fichier CSV et en affichant un graphique dans Google Sheets. Procédez comme suit :

  1. Cliquez sur Télécharger au format CSV.
  2. Ouvrez Google Sheets, puis créez une feuille de calcul.
  3. Cliquez sur Fichier > Importer. Importez le fichier de résultats en le transférant depuis votre ordinateur.
  4. Dans la boîte de dialogue Importer un fichier, sélectionnez Remplacer la feuille active, puis cliquez sur Importer.
  5. Appuyez sur CTRL+A pour sélectionner toutes les données de la feuille de calcul.
  6. Cliquez sur Insertion > Graphique pour créer un graphique à partir des données.
  7. Sous l'onglet Graphiques, sélectionnez un graphique en courbes, puis cliquez sur Insérer.

La figure suivante présente les données sous la forme d'un graphique en courbes.

Graphique en courbes affichant les cours acheteurs

Maintenant, vous pouvez facilement constater que le dollar a eu tendance à baisser par rapport à la livre sterling pendant la majeure partie des 20 premières minutes de la journée, puis s'est légèrement redressé au cours des cinq minutes suivantes.

Combiner des tables

Les données que vous avez chargées dans BigQuery ont été réparties entre deux fichiers CSV et se trouvent maintenant dans deux tables. Vous pouvez facilement combiner les données en intégrant une requête de table, comme illustré dans l'exemple suivant. L'instruction SQL combine alors toutes les tables dont l'ID contient "gbpusd", ce qui est le cas des deux tables que vous avez créées. La requête renvoie simplement les premier et dernier horodatages de l'ensemble de données.

SELECT
  MIN(time) AS time1,
  MAX(time) AS time2
FROM
  (TABLE_QUERY(timeseries,
      'table_id CONTAINS "gbpusd"'));

Vous pouvez également combiner des tables spécifiques, en fonction de leur nom. Par exemple, la requête suivante extrait les cours vendeurs aux alentours de minuit (GMT) entre le 31 janvier et le 1er février. Notez que lorsque vous répertoriez des colonnes séparées par des virgules dans une clause SELECT, le SQL de BigQuery exécute une commande UNION, et non l'opération JOIN traditionnelle que vous pourriez attendre si vous avez utilisé ce langage auparavant.

SELECT
  STRFTIME_UTC_USEC(time,"%m-%d-%Y %r") AS time,
  ask
FROM
  timeseries.gbpusd_0114,
  timeseries.gbpusd_0214
WHERE
  time BETWEEN TIMESTAMP("2014-01-31 23:30:00.000")
  AND TIMESTAMP("2014-02-01 00:29:59.999")
ORDER BY
  time ASC;

Cette requête formate l'horodatage à l'aide de la fonction STRFTIME_UTC_USEC pour deux raisons. Premièrement, l'horodatage doit être dans un format permettant un tri sur les deux jours. Un format tel que HOUR ne fonctionnerait pas, car le résultat trié ne prendrait pas en compte le changement de jour. Deuxièmement, le libellé du graphique doit être dans un format approprié. Vous pourriez par exemple ajouter au graphique des libellés indiquant le temps UTC complet, y compris les microsecondes, mais ce type d'informations n'est pas particulièrement utile en tant que libellé de graphique.

La figure suivante présente un graphique des résultats.

Graphique en courbes représentant les données combinées de plusieurs fichiers

Vous pouvez maintenant voir exactement ce qui est arrivé au cours vendeur au niveau de la limite entre les deux tables.

Analyser la fréquence des données

Sur les marchés financiers, le taux de variation des cotes peut parfois fournir des informations intéressantes. Vous pouvez exécuter des requêtes pour obtenir des informations sur le nombre de cotes de change, appelées ticks, dans une période donnée. Il est important de noter qu'un tick n'est pas une unité de temps cohérente, comme le tic-tac d'une horloge. Un tick correspond à une seule cote représentant souvent un changement du prix.

La requête suivante renvoie le nombre de ticks par heure pour le 16 janvier 2014.

SELECT
  HOUR(time) AS hour,
  COUNT(time) AS num_ticks
FROM
  timeseries.gbpusd_0114
WHERE
  time BETWEEN TIMESTAMP("2014-01-16 00:00:00.000")
  AND TIMESTAMP("2014-01-16 23:59:59.999")
GROUP BY
  hour
ORDER BY
  hour ASC;

Le graphique à barres suivant présente les résultats.

Graphique à barres représentant la fréquence

Vous pouvez voir sur le graphique que la période à laquelle l'activité a été la plus importante ce jour-là se situe entre midi et 16 h GMT.

Ensuite, exécutez la requête suivante pour afficher le nombre moyen de ticks pour chaque heure de la journée sur l'ensemble du mois de janvier 2014. La requête calcule la moyenne en divisant le nombre total de ticks par le nombre de jours de négociation dans le mois, puis en les regroupant par heure.

SELECT
  HOUR(time) AS hour,
  COUNT(time)/COUNT(DISTINCT DAY(time)) AS avg_ticks
FROM
  timeseries.gbpusd_0114
GROUP BY
  hour
ORDER BY
  hour ASC;

Le graphique ci-dessous montre la distribution des moyennes. Vous pouvez constater que la distribution est semblable au résultat obtenu pour le 16 janvier. Il s'agit donc d'un jour plutôt dans la moyenne pour ce mois en ce qui concerne l'activité de cotation.

Graphique à barres affichant la fréquence moyenne

Calculer une moyenne mobile

La moyenne mobile simple (MMS) est une technique fondamentale en matière d'analyse des séries temporelles financières. Vous pouvez calculer une MMS des données de change à l'aide de BigQuery. La requête suivante extrait une série temporelle pour une MMS de 60 secondes des cours acheteurs sur une période de trois heures le matin du 16 janvier.

SELECT
  TIME(S1.time) AS bid_time,
  AVG(S2.bid) AS avg_bid
FROM
  timeseries.gbpusd_0114 AS S1
JOIN EACH
  timeseries.gbpusd_0114 AS S2
ON
  S1.time = S2.time
WHERE
  TIMESTAMP_TO_SEC(S2.time)
  BETWEEN (TIMESTAMP_TO_SEC(S1.time) - 60)
  AND TIMESTAMP_TO_SEC(S1.time)
  AND
  S1.time
  BETWEEN TIMESTAMP("2014-01-16 09:00:00.000")
  AND TIMESTAMP("2014-01-16 11:59:59.999")
GROUP BY
  bid_time
ORDER BY
  bid_time ASC;

Cette requête calcule les moyennes à l'aide de la fonction AVG intégrée. Elle crée la fenêtre de la moyenne mobile en effectuant d'abord une autojointure sur les horodatages de la table, puis en limitant le résultat de la jointure à une plage de 60 secondes à l'aide de la clause WHERE. Dans la clause JOIN, la requête emploie le modificateur EACH, ce qui indique à BigQuery que la jointure référence deux tables volumineuses. Cela permet au moteur d'exécution de la requête d'effectuer des optimisations. Enfin, la clause GROUP BY agrège les moyennes mobiles, et la clause ORDER BY trie les résultats.

La figure suivante montre le graphique en courbes des données.

Graphique en courbes affichant la moyenne mobile

Supprimer les données de test

Lorsque vous avez fini d'utiliser les données de test, vous devez supprimer l'ensemble de données. Procédez comme suit :

  1. Dans l'interface utilisateur Web de BigQuery, à droite du nom de l'ensemble de données timeseries, cliquez sur la flèche vers le bas.
  2. Cliquez sur Supprimer l'ensemble de données.
  3. Lorsque vous êtes invité à confirmer l'opération de suppression, cliquez sur OK.

Pour en savoir plus sur BigQuery, lisez la documentation BigQuery.

Étape suivante

Testez par vous-même d'autres fonctionnalités de Google Cloud Platform. Découvrez nos tutoriels.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…