El algoritmo dynamic time warping (DTW), también conocido como ali­nea­mie­n­to temporal dinámico, se utiliza para comprobar las coin­ci­de­n­cias en se­cue­n­cias de valores de di­fe­re­n­tes lo­n­gi­tu­des mediante la co­m­pa­ra­ción con patrones. Para ello, sin importar el desfase del tiempo, el algoritmo crea rutas de ali­nea­mie­n­to en las que pueden re­co­no­ce­r­se coin­ci­de­n­cias mediante ba­c­k­tra­c­ki­ng y medidas di­fe­re­n­cia­les. Este algoritmo se utiliza, entre otros, en el re­co­no­ci­mie­n­to de voz, en el re­co­no­ci­mie­n­to de firmas digitales o en el análisis de mercados fi­na­n­cie­ros.

¿Qué significa dynamic time warping?

Dynamic time warping (DTW) se puede traducir como “ali­nea­mie­n­to temporal dinámico”. Aunque en un principio se puede co­n­si­de­rar una te­c­no­lo­gía sacada de Star Trek, no es más que un algoritmo que permite comparar se­cue­n­cias te­m­po­ra­les o series de valores. Aunque las se­cue­n­cias cuenten con lo­n­gi­tu­des o ve­lo­ci­da­des di­fe­re­n­tes, el “ali­nea­mie­n­to” permite encontrar patrones de coin­ci­de­n­cias entre las se­cue­n­cias.

Por ejemplo, si se comparan varias firmas de una misma persona, el algoritmo permite ide­n­ti­fi­car coin­ci­de­n­cias a pesar de que cada firma tenga un tamaño diferente. Lo mismo ocurre al usar el dynamic time warping al analizar dos se­cue­n­cias de marchas; aunque cada marcha se produzca a una velocidad diferente o la distancia recorrida varíe, el algoritmo es capaz de reconocer patrones de coin­ci­de­n­cia.

¿Para qué se usa el dynamic time warping?

Aunque en un primer momento el algoritmo DTW pueda parecer un concepto abstracto sin mucha utilidad, lo cierto es que cumple con una im­po­r­ta­n­te función de análisis en distintos ámbitos. Es es­pe­cia­l­me­n­te útil en el análisis de se­cue­n­cias de vídeo y audio, gráficos o modelos es­ta­dí­s­ti­cos, esto es, con aquellas se­cue­n­cias que se pueden comparar de forma lineal. Si se detectan de­te­r­mi­na­das coin­ci­de­n­cias, el algoritmo DTW puede poner en marcha de­te­r­mi­na­das acciones, señales o funciones.

Además, gracias a la medición de patrones y al re­co­no­ci­mie­n­to de pautas en series de valores, también se pueden analizar de­sa­rro­llos similares de sistemas en distintos periodos de tiempo. Por este motivo, el algoritmo DTW también se usa en te­c­no­lo­gías como el machine learning, el su­pe­r­vi­sed learning o la neural networks. Con este algoritmo, las distintas te­c­no­lo­gías pre­se­n­ta­das entrenan sus ca­pa­ci­da­des de análisis y reacción y, en co­n­se­cue­n­cia, pueden evaluar conjuntos de datos con mayor efi­cie­n­cia.

¿Cómo funciona el dynamic time warping?

Para ide­n­ti­fi­car patrones y coin­ci­de­n­cias en distintas series de valores, DTW busca coin­ci­de­n­cias óptimas, para lo que resulta útil los pri­n­ci­pios “one-to-many” o “many-to-one”. Se aplican diversas normas y co­n­di­cio­nes:

  • Cada valor de una secuencia debe co­m­pa­rar­se con uno o varios valores de la segunda secuencia (y viceversa).
  • El primer valor de una secuencia debe co­m­pa­rar­se con el primer valor de la segunda secuencia.
  • El último valor de una secuencia debe co­m­pa­rar­se con el último valor de la segunda secuencia.
  • El mapeo de la serie de valores de la primera secuencia con la serie de valores de la segunda secuencia debe aumentar de forma mo­no­tó­ni­ca. Por lo tanto, los valores al principio y al final de las se­cue­n­cias deben coincidir en sus po­si­cio­nes, sin omisiones ni so­la­pa­mie­n­tos.

Si se cumplen todos los puntos antes expuestos se habla de una coin­ci­de­n­cia óptima. Aquí entra en juego la llamada función de costo, con la que se puede crear una medida di­fe­re­n­cial entre los valores de las se­cue­n­cias. Una coin­ci­de­n­cia óptima depende de una función de costo lo más baja posible.

Además, el algoritmo genera una ruta de ali­nea­mie­n­to capaz también de reconocer coin­ci­de­n­cias óptimas en se­cue­n­cias de diferente longitud. La ruta de ali­nea­mie­n­to se crea mediante ba­c­k­tra­c­ki­ng: el algoritmo relaciona uno o más valores de una secuencia con puntos de la segunda secuencia. De este modo, se pueden encontrar coin­ci­de­n­cias incluso en se­cue­n­cias te­m­po­ra­les de distinta longitud, sin importar la de­fo­r­ma­ción temporal.

¿Dónde se utiliza el dynamic time warping?

Se puede usar el algoritmo DTW siempre que los conjuntos de datos puedan pro­ye­c­tar­se y co­m­pa­rar­se en se­cue­n­cias lineales. Por ejemplo, el algoritmo DTW se utiliza a menudo como análisis previo o posterior del análisis de datos, ya sean datos de audio, de vídeo, al­fa­nu­mé­ri­cos o conjuntos de datos basados en Big Data.

Otros ámbitos de apli­ca­ción del DTW son:

  • Re­co­no­ci­mie­n­to de patrones en se­cue­n­cias de audio: el DTW se usa en el re­co­no­ci­mie­n­to de voz. Los patrones de voz grabados y al­ma­ce­na­dos se comparan mediante DTW en la co­n­co­r­da­n­cia de patrones. Para se­cue­n­cias de audio de distinta duración o velocidad, el DTW permite detectar coin­ci­de­n­cias incluso en vocales y co­n­so­na­n­tes pro­nu­n­cia­das a distinta velocidad.
  • Re­co­no­ci­mie­n­to de patrones en se­cue­n­cias de vídeo: para reconocer gestos y mo­vi­mie­n­tos, DTW compara se­cue­n­cias de vídeo. Se realiza una co­m­pa­ra­ción y un re­co­no­ci­mie­n­to de patrones en se­cue­n­cias de mo­vi­mie­n­tos, incluso si la duración temporal o la velocidad difieren en las se­cue­n­cias.
  • Re­co­no­ci­mie­n­to de patrones en datos fi­na­n­cie­ros: otro ámbito de uso im­po­r­ta­n­te se encuentra en los mercados fi­na­n­cie­ros y en las finanzas em­pre­sa­ria­les. De hecho, el algoritmo DTW puede ser muy útil para generar pro­nó­s­ti­cos sobre ciclos fi­na­n­cie­ros, volumen de ventas o te­n­de­n­cias en bolsa. Este algoritmo puede uti­li­zar­se para vi­sua­li­zar ciclos y te­n­de­n­cias similares o idénticos en datos de mercados y empresas en distintos periodos de tiempo. El análisis se basa en datos em­pre­sa­ria­les y fi­na­n­cie­ros re­co­pi­la­dos, así como en pro­nó­s­ti­cos.

¿Qué he­rra­mie­n­tas usan el algoritmo dynamic time warping?

El algoritmo DTW puede en­co­n­trar­se en las bi­blio­te­cas de varios programas de código abierto. Por ejemplo, en:

  • DTW Suite con paquetes de pro­gra­ma­ción para Python y R.
  • FastDTW, que ofrece una im­ple­me­n­ta­ción Java para al­go­ri­t­mos DTW.
  • MatchBox, que im­ple­me­n­ta DTW para señales de audio.
  • mlpy y pydtw, que pro­po­r­cio­nan funciones DTW como bi­blio­te­cas de Python para machine learning.
  • Gesture Re­co­g­ni­tion, que ofrece al­go­ri­t­mos DTW para el re­co­no­ci­mie­n­to gestual en tiempo real.

Para usar DTW de la forma más eficiente posible, también se utilizan las si­guie­n­tes técnicas de fast co­mpu­tation:

  • PruneDTW
  • SparseDTW
  • FastDTW
  • Mu­l­tie­s­ca­la­D­TW

Un ejemplo: algoritmo dynamic time warping en Python

Como muestra de la co­m­ple­ji­dad del algoritmo DTW, puedes encontrar un ejemplo de este algoritmo DTW en Python:

def dtw(s, t, window):
    n, m = len(s), len(t)
    w = np.max([window, abs(n-m)])
    dtw_matrix = np.zeros((n+1, m+1))
    
    for i in range(n+1):
        for j in range(m+1):
            dtw_matrix[i, j] = np.inf
    dtw_matrix[0, 0] = 0
    
    for i in range(1, n+1):
        for j in range(np.max([1, i-w]), np.min([m, i+w])+1):
            dtw_matrix[i, j] = 0
    
    for i in range(1, n+1):
        for j in range(np.max([1, i-w]), np.min([m, i+w])+1):
            cost = abs(s[i-1] - t[j-1])
            # take last min from a square box
            last_min = np.min([dtw_matrix[i-1, j], dtw_matrix[i, j-1], dtw_matrix[i-1, j-1]])
            dtw_matrix[i, j] = cost + last_min
    return dtw_matrix
Python

En la función pre­se­n­ta­da en el ejemplo primero se incluyen tres pa­rá­me­tros: en primer lugar, se incluyen las dos señales que se van a analizar en los pa­rá­me­tros s y t. No­r­ma­l­me­n­te, las señales son matrices o vectores. El parámetro* window* puede uti­li­zar­se para de­te­r­mi­nar con cuántos elementos puede pro­du­ci­r­se una coin­ci­de­n­cia.

A co­n­ti­nua­ción, se crea una matriz en la función y se ini­cia­li­za con el valor infinito. El paso central del algoritmo DTW se produce en los dos últimos bucles for anidados: el valor de la variable last_min se añade a los costos an­te­rio­res de la variable costs, los cuales resultan de la distancia entre los dos valores de entrada en el índice re­s­pe­c­ti­vo.

El valor de la variable last_min resulta de valores ca­l­cu­la­dos an­te­rio­r­me­n­te gracias a la pro­gra­ma­ción dinámica. Se escoge el mínimo de los valores ca­l­cu­la­dos an­te­rio­r­me­n­te y se añade a los costos ca­l­cu­la­dos pre­via­me­n­te. Con este paso se establece si dos elementos coinciden, si se añade un elemento o si se elimina un elemento.

Después de que la función se ejecute, se obtiene una matriz de distancia a partir de la cual se puede leer la ruta de ali­nea­mie­n­to.

Al­te­r­na­ti­vas al dynamic time warping

Algunas de las al­te­r­na­ti­vas al algoritmo DTW para el re­co­no­ci­mie­n­to de patrones en se­cue­n­cias y se­cue­n­cias te­m­po­ra­les son:

  • Co­rre­la­tion Optimized Warping (COW)
  • Análisis de datos fu­n­cio­na­les
  • Modelo oculto de Márkov
  • Algoritmo de Viterbi
Ir al menú principal