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
Ponctuelle, glissante, cumulative
| Type | Dépend de… | Exemple |
|---|---|---|
| Ponctuelle | une ou quelques lignes précises | LAG, LEAD |
| Glissante | un voisinage local | moyenne glissante |
| Cumulative | tout le passé jusqu'à la ligne courante | somme 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
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
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
À toi de coder