Contrairement à une simple corrélation, le Dynamic Time Warping détecte les ressemblances même lorsque les mouvements sont légèrement décalés dans le temps. Il retourne un score plus il est faible, plus les deux périodes analysées se comportent de façon identique.

PYTHON
import numpy as np

def dtw_distance(serie1, serie2):
    s1 = np.array(serie1, dtype=float)
    s2 = np.array(serie2, dtype=float)
    n, m = len(s1), len(s2)

    dtw_matrix = np.full((n + 1, m + 1), np.inf)
    dtw_matrix[0, 0] = 0.0

    for i in range(1, n + 1):
        for j in range(1, m + 1):
            cost = abs(s1[i - 1] - s2[j - 1])
            dtw_matrix[i, j] = cost + min(
                dtw_matrix[i - 1, j],
                dtw_matrix[i, j - 1],
                dtw_matrix[i - 1, j - 1],
            )

    return float(dtw_matrix[n, m])