Aller au contenu
Apprendre.
  • M1 · toutes les matières15 matières : Préparation de données, API & sécurité, CI/CD, Docker, Merise, Dataviz, KNIME, ML appliqué : projet LoL, SQL & UML, SQL avancé, Machine Learning, Git, IA frugale & responsable, Qualité des données, MathématiquesAnnée
  • M2 · toutes les matières4 matières : Deep Learning, AI Act, Comex & Fundraising, Gouvernance & DataMeshAnnée
  • Deep LearningM2 · 4 modules · Réseaux de neurones, CNN, texte, modèles génératifs.Matière
  • Préparation de donnéesM1 · 3 modules · Nettoyer, transformer et fusionner des données avec Python.Matière
  • API & sécuritéM1 · 2 modules · Consommer, concevoir et sécuriser des API.Matière
  • CI/CDM1 · 1 module · Intégration et livraison continues.Matière
  • DockerM1 · 3 modules · Conteneurs, images, volumes, réseaux, Compose.Matière
  • MeriseM1 · 2 modules · Modéliser une base : MCD, MLD, MPD.Matière
  • DatavizM1 · 2 modules · Visualiser pour comprendre et décider.Matière
  • KNIMEM1 · 1 module · Explorer et nettoyer des données en workflow.Matière
  • ML appliqué : projet LoLM1 · 2 modules · Du besoin métier au POC de vision par ordinateur.Matière
  • SQL & UMLM1 · 3 modules · Modèles UML et requêtes SQL.Matière
  • SQL avancéM1 · 3 modules · Jointures, fenêtres, CTE, optimisation.Matière
  • Machine LearningM1 · 3 modules · Régression, classification, segmentation, projet.Matière

↑↓ naviguer↵ ouvre le résultat en surbrillanceesc fermer

Partie 3 · Voisinages

Fenêtres : glissantes et cumulatives

Une fois le groupe et l'ordre fixés, on précise combien de lignes participent au calcul. Exemple :

AVG(close) OVER (
    PARTITION BY ticker
    ORDER BY date
    ROWS BETWEEN 4 PRECEDING AND CURRENT ROW
)

C'est une moyenne glissante sur 5 observations. Pour la ligne d'indice i, la fenêtre est {i−4, i−3, i−2, i−1, i} : on inclut la ligne courante et on remonte de quatre lignes, soit 5 lignes au maximum. ROWS transforme une table ordonnée en une suite de voisinages glissants.

Avec la série 100, 102, 101, 105, 107, 108, la fenêtre à la date 6 contient {102, 101, 105, 107, 108}, donc ma5(6) = (102+101+105+107+108)/5 = 104,6.

Vérifie que tu as compris

Série 100, 102, 101, 105, 107, 108 : que vaut la moyenne glissante sur 5 lignes à la date 6 ?

Ponctuelle, glissante, cumulative

TypeDépend de…Exemple
Ponctuelleune ou quelques lignes précisesLAG, LEAD
Glissanteun voisinage localmoyenne glissante
Cumulativetout le passé jusqu'à la ligne courantesomme cumulative

Chaque type de fenêtre encode une forme différente de mémoire. Pour un cumul :

SUM(ret) OVER (
    PARTITION BY ticker
    ORDER BY date
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
)

On reste dans un actif, on remonte jusqu'au début de l'historique et on somme tous les rendements jusqu'à la date courante.

À toi de coder

Moyenne glissante sur 5 jours

La fenêtre ROWS BETWEEN 4 PRECEDING AND CURRENT ROW regroupe la ligne courante et les 4 précédentes (5 lignes au maximum). Écris la requête qui renvoie ticker, date, ma5 trié par ticker, date.

Attention aux bords : au début de la série il y a moins de 5 lignes, la moyenne porte alors sur les lignes disponibles.

Ctrl/⌘+Entrée

Local ou global ?

Compare AVG(close) OVER (PARTITION BY ticker) et AVG(close) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW). Le premier calcule une moyenne globale par actif (la même valeur sur toutes ses lignes) ; le second une moyenne locale glissante. Confondre calcul global et calcul local est une des erreurs critiques du SQL analytique.

À toi de coder

Écart à la moyenne globale de l'actif

AVG(close) OVER (PARTITION BY ticker) (sans ORDER BY) est une moyenne globale par actif, répétée sur chaque ligne ; elle utilise donc le futur. C'est pratique pour une analyse descriptive, dangereux pour un signal. Renvoie ticker, date, ecart avec ecart = close - moyenne de l'actif, trié par ticker, date.

Ctrl/⌘+Entrée

Que se passe-t-il au début de la série ?

Sur les premières dates, LAG renvoie souvent NULL ; une moyenne glissante de taille 5 peut être calculée sur moins de 5 observations si le moteur l'autorise. Les effets de bord ne sont pas des détails techniques : ils modifient la signification du calcul. Par exemple à la date 2 de la série 100, 102, … la fenêtre ne contient que {100, 102}.

Le choix de la taille de fenêtre est une hypothèse de modèle : une moyenne sur 3 jours est plus réactive, une moyenne sur 10 jours plus stable. Définir une fenêtre, c'est répondre à « quelles sont exactement les lignes qui influencent la ligne courante ? ».

À toi de coder

Compter les lignes réellement utilisées

Les effets de bord font partie du sens du calcul. Pour une moyenne glissante sur 3 lignes (2 PRECEDING AND CURRENT ROW), écris une requête qui renvoie, pour l'actif A seulement (trié par date), date, ma3, n où n = COUNT(close) OVER (...) avec la même fenêtre : le nombre de prix réellement moyennés.

Ctrl/⌘+Entrée

À toi de coder

Somme cumulative des rendements

Un cumul est une dépendance cumulative : tout le passé jusqu'à la ligne courante. On calcule d'abord ret dans une CTE (WITH), puis on cumule dans la requête finale. Renvoie ticker, date, cum trié par ticker, date.

Remarque : SUM ignore les NULL ; le cumul de la première ligne (rendement NULL) est donc NULL, puis il démarre au 2e jour.

Ctrl/⌘+Entrée