동적 시간 워핑(DTW)이란? AI에서 속도가 다른 시계열의 패턴을 맞춰 비교하는 방법
TL;DR
동적 시간 워핑(DTW)은 진행 속도가 다른 두 시계열의 대응 위치를 찾아 차이를 계산하는 방법입니다. 같은 동작을 빨리 하거나 천천히 해도 비슷한 흐름인지 비교할 때 씁니다. 시간 순서는 지키면서 한 점을 여러 점과 연결할 수 있으며, 점수가 낮다고 두 기록의 실제 길이와 의미까지 같다는 뜻은 아닙니다.
핵심 3줄 요약
- 핵심 1
시간 위치를 유연하게 맞춥니다. 같은 순번끼리만 비교하지 않고 순서를 지키는 대응 경로를 찾습니다. - 핵심 2
점수와 경로를 함께 봅니다. 낮은 비용이 나와도 지나친 늘이기가 실제 차이를 가렸는지 확인합니다. - 핵심 3
비교 조건을 고정합니다. 단위·전처리·허용 경로·비용 계산법이 바뀌면 같은 숫자도 다르게 해석해야 합니다.
이 글에서 다룰 내용
- DTW의 한 문장 정의와 시간 정렬의 뜻
- 길이가 다른 숫자열로 보는 쉬운 예시
- 대응 경로와 누적 비용을 구하는 과정
- 워핑 창·점수·다변량 입력의 역할
- 시계열 예측·CTC·리샘플링과의 차이
- 동작 비교·시계열 분류·구간 검색 활용
- 전처리·과도한 정렬·검증 데이터의 주의점
동적 시간 워핑을 한 문장으로 정의하면 무엇인가요?
동적 시간 워핑은 두 시계열의 순서를 보존하는 정렬 경로 가운데 누적 비교 비용이 가장 작은 경로를 찾는 알고리즘입니다.
영문 이름은 Dynamic Time Warping이며 보통 DTW로 줄여 부릅니다. 동적 시간 왜곡이라고도 옮깁니다. 여기서 워핑은 기록을 실제로 다시 촬영하거나 시간을 되돌린다는 뜻이 아니라 비교할 위치 사이의 대응을 유연하게 정한다는 뜻입니다.
tslearn 공식 문서는 DTW를 시계열 사이의 유사성을 재는 방법으로 설명합니다. 두 기록의 시간 단계 수는 달라도 되지만 각 단계가 나타내는 특징의 차원은 같아야 합니다. 한쪽은 온도 하나, 다른 쪽은 온도와 진동을 함께 담았다면 그대로 비교할 입력이 아닙니다.
한 줄 정리: DTW는 어느 시점끼리 대응시킬지까지 찾아서 두 시간 기록의 차이를 계산합니다.
쉬운 예시로 이해해 볼까요?
감자나라ai님이 같은 기계 동작을 두 번 측정했다고 가정해 보겠습니다. 첫 번째 기록은 빠르게 진행됐고 두 번째 기록은 중간 상태에 조금 더 오래 머물렀습니다. 아래 숫자는 원리를 설명하는 예시이며 실제 장비의 성능 측정값은 아닙니다.
첫 기록은
[1, 2, 3]
이고 두 번째는
[1, 2, 2, 3]
입니다. 같은 순번끼리만 비교하면 뒤쪽의 위치가 어긋납니다. DTW는 첫 기록의 2를 두 번째 기록의 연속된 2 두 개에 대응시켜 흐름을 맞춥니다.
tslearn의 기본 계산법에서는 이 예시의 DTW 값이 0입니다. 대응된 값의 차이가 모두 0이기 때문입니다. 기록의 길이가 다르더라도 시간 늘이기를 허용한 뒤의 비용은 같아질 수 있습니다. 점수 0만으로 원본 배열이 완전히 같다고 판단하면 안 됩니다.
두 번째 기록 끝에 4를 더한
[1, 2, 2, 3, 4]
와 비교하면 기본 DTW 값은 1입니다. 전체 기록을 비교하는 기본 경로는 마지막 위치까지 닿아야 하므로 마지막 차이가 비용에 남습니다. 필요한 구간만 찾는 문제라면 뒤에서 설명할 부분 시퀀스 DTW를 구분해서 봅니다.
쉬운 예시: 같은 멜로디를 천천히 부른 녹음과 빠르게 부른 녹음을 비교할 때, 몇 번째 순간인지보다 서로 대응하는 소리 구간을 먼저 찾는 방식에 가깝습니다.
왜 AI에서 동적 시간 워핑이 중요한가요?
같은 패턴의 속도 차이를 허용합니다
걷기나 손동작처럼 같은 종류의 행동도 진행 속도가 다릅니다. 고정 위치만 비교하면 중간 동작이 조금 늦었다는 이유로 큰 차이가 생깁니다. DTW는 이런 시간 어긋남을 허용해 모양이 비슷한 기록을 비교하는 기준으로 쓸 수 있습니다.
분류와 군집화의 비교 기준이 됩니다
DTW 자체가 정답 라벨을 배우는 분류 모델은 아닙니다. 새 기록과 학습 기록 사이의 DTW를 구한 뒤 가까운 사례의 라벨을 참고하면 시계열 분류에 활용합니다. tslearn은 DTW를 쓰는 시계열 군집화와 대표 시계열 계산도 안내합니다.
모든 시간 차이를 지워도 좋은 것은 아닙니다. 동작이 오래 걸리는 현상 자체가 고장의 단서라면 정렬 후 모양만 비슷하다고 정상으로 처리해서는 안 됩니다. 무엇을 같게 보고 무엇을 차이로 남길지 먼저 정해야 비교 방법을 고를 수 있습니다.
동적 시간 워핑은 어떤 순서로 작동하나요?
시점 쌍마다 비교 비용을 계산합니다
한 시계열의 각 점과 다른 시계열의 각 점을 비교해 격자처럼 비용을 놓습니다. tslearn의 기본 DTW는 대응된 특징 벡터 사이의 유클리드 거리 제곱을 사용합니다. 여러 센서 채널이 있으면 각 시점의 채널 값을 하나의 벡터로 비교합니다.
앞에서 쌓인 최소 비용을 더합니다
각 칸에는 그 칸의 비용과 이전 칸들에서 올 수 있는 최소 누적 비용을 더합니다. 기본 경로는 가로·세로·대각선으로 전진하며 뒤로 돌아가지 않습니다. 가로 또는 세로 이동이 한쪽 점을 다른 쪽 여러 점과 연결하는 대응을 만듭니다.
모든 경로를 하나씩 끝까지 만들어 비교하는 대신 이미 계산한 작은 구간의 결과를 재사용합니다. 이를 동적 계획법이라고 부릅니다. 제약 없는 기본 계산의 시간 비용은 두 시계열 길이의 곱에 비례하므로 기록이 길어질수록 계산 부담이 커집니다.
마지막 비용과 정렬 경로를 확인합니다
기본적인 전체 시퀀스 DTW는 두 기록의 시작점에서 출발해 끝점까지 연결합니다. tslearn의
dtw
는 최소 누적 제곱 비용에 제곱근을 취한 점수를 돌려줍니다.
dtw_path
를 사용하면 어떤 위치끼리 연결했는지도 함께 확인합니다.
핵심 인사이트: 비교 점수는 정렬 규칙을 적용한 결과입니다. 점수가 낮아진 이유를 보려면 원본 곡선과 대응 경로를 함께 확인하세요.
워핑 창과 주요 설정은 무엇을 뜻하나요?
워핑 창은 허용할 시간 어긋남을 제한합니다
Sakoe-Chiba band는 허용 경로를 대각선 주변으로 제한하는 방식입니다. tslearn에서는
global_constraint="sakoe_chiba"
와
sakoe_chiba_radius
로 지정합니다. 반경을 크게 두면 더 멀리 떨어진 시점끼리 연결할 여지가 늘어납니다.
반경은 초 단위 지연을 그대로 적는 값이 아닙니다. 표본 간격과 시계열 길이, 구현의 경로 마스크를 함께 확인해야 합니다. 지나치게 좁히면 실제 속도 차이를 놓치고 너무 넓히면 관계없는 부분까지 억지로 맞출 수 있습니다. 문서의 예시 값을 만능 설정으로 쓰지 마세요.
기울기 제약과 창의 폭은 다릅니다
Itakura 제약은 경로의 최대 기울기를 제한하는 방식입니다. tslearn에서는
global_constraint="itakura"
와
itakura_max_slope
를 사용합니다. Sakoe-Chiba 반경과 같은 숫자를 넣더라도 같은 정렬 범위를 의미하지 않습니다.
함수마다 최종 점수의 계산법이 다릅니다
dtw_path_from_metric
은 사용자가 정한 시점 간 비용을 경로 전체에 더합니다.
metric="sqeuclidean"
로 계산하면 제곱 거리의 합을 반환하므로 기본
dtw
가 반환하는 제곱근을 취한 값과 구분합니다. API 이름에 DTW가 들어간다는 이유만으로 점수와 임계값을 그대로 옮기지 않습니다.
기본 DTW 점수는 경로 길이로 나눈 평균 오차가 아닙니다. 기록 길이와 단위가 다른 실험의 점수를 나란히 놓기 전에 누적 방식과 정규화 여부부터 맞추세요. 도구가 유사도라고 이름 붙여도 이 글의 비용은 낮을수록 더 잘 맞는 방향입니다.
동적 시간 워핑과 헷갈리는 용어는 무엇이 다른가요?
시계열 예측과 DTW의 차이
시계열 예측은 과거 기록으로 아직 관측하지 않은 미래 값을 추정하는 작업입니다. DTW는 주어진 두 기록의 대응과 차이를 구합니다. 비슷한 과거 사례를 찾는 부품으로 예측에 활용할 수 있지만 DTW 점수 자체가 내일의 수요는 아닙니다.
리샘플링과 DTW의 차이
리샘플링은 정해진 시간 간격이나 길이에 맞춰 표본을 다시 만드는 전처리입니다. DTW는 두 기록을 비교하면서 비용이 낮아지는 대응 위치를 찾습니다. 길이를 같게 만들어도 중간 동작의 시점까지 모두 맞지는 않으므로 해결하려는 문제를 구분합니다.
CTC와 DTW의 차이
CTC는 입력 시퀀스와 정답 라벨 시퀀스의 세부 정렬을 미리 주지 않고 모델을 학습하는 손실 방식입니다. 여러 정답 경로의 확률을 합칩니다. DTW는 두 시계열의 값 차이를 비용으로 두고 최소 비용 경로를 찾으므로 학습 목적과 출력의 의미가 다릅니다.
부분 시퀀스 DTW와 전체 DTW의 차이
기본 DTW는 양쪽 기록의 처음과 끝을 연결합니다.
dtw_subsequence_path
는 짧은 질의와 긴 기록을 비교해 긴 기록 안에서 잘 맞는 시작·종료 위치를 찾습니다. 긴 녹음 중 일부 패턴만 검색하려는데 전체 길이를 강제로 맞추는 실수를 피할 수 있습니다.
실전에서는 어디에 쓰이나요?
센서 동작과 시계열 사례를 비교합니다
반복 동작의 센서 기록을 기준 사례와 비교하는 데 활용합니다. 예를 들어 동작의 시작과 끝을 자른 뒤 속도 차이를 허용해 모양을 비교합니다. 실제 판정에서는 전체 소요 시간과 최대 진폭도 별도로 남겨 정렬 과정에서 가려진 차이가 없는지 봅니다.
분류·군집화와 패턴 검색에 연결합니다
여러 기록의 DTW를 비교해 가까운 학습 사례를 찾거나 비슷한 흐름끼리 묶을 수 있습니다. 긴 기록 속 짧은 패턴 검색에는 부분 시퀀스 방식을 검토합니다. 비교 비용과 검색 범위를 먼저 고른 뒤 실제 정답이 있는 검증 자료에서 성능을 확인하는 순서가 좋습니다.
군집의 대표 기록을 구할 때도 시간 위치가 어긋나면 단순 평균이 봉우리를 뭉갤 수 있습니다. tslearn은 정렬을 고려하는 DBA라는 대표 시계열 계산법을 안내합니다. 이는 DTW를 활용하는 별도 절차이며 두 기록의 거리 한 번을 구하는 연산과는 구분됩니다.
동적 시간 워핑을 적용할 때 어떤 순서로 확인하나요?
1. 비교 목적과 입력 단위를 정합니다
전체 동작 비교인지 긴 기록 속 부분 검색인지 먼저 구분합니다. 두 입력의 시간 축, 센서 채널 순서, 측정 단위와 표본 간격을 맞춥니다. 누락 구간과 비정상 측정값은 별도로 점검하며 길이가 다르다는 이유만으로 데이터가 잘못됐다고 판단하지 않습니다.
2. 점수와 경로를 작은 예시로 점검합니다
같은 기록, 중간 상태가 반복된 기록, 명확히 다른 기록을 넣어 점수 방향을 확인합니다. 창을 적용하기 전후의 경로를 그려 특정 점에 너무 많은 대응이 몰리는지 봅니다. 전처리가 필요하다면 값의 크기 차이를 없애도 되는 목적부터 확인합니다.
3. 검증 조건과 구현 설정을 남깁니다
같은 사람이나 장비에서 나온 겹치는 구간을 학습·평가 양쪽에 무작위로 섞으면 결과가 낙관적으로 보일 수 있습니다. 사용 환경에 맞게 사람·장비·시간 단위를 나누고 창의 폭과 판정 임계값은 검증 자료로 고릅니다. 마지막 테스트 자료는 설정 선택에 쓰지 않습니다.
함수 이름, 라이브러리 버전, 전처리와 경로 제약을 기록합니다. 새 버전이나 다른 도구로 바꿀 때는 반환값에 제곱근이 들어가는지, 경로 길이로 나누는지까지 비교합니다. 점수 숫자만 같게 맞추는 것보다 동일 입력에서 동일 계산을 하는지 확인하는 일이 중요합니다.
사용할 때 무엇을 주의해야 하나요?
시간 차이가 중요한 신호인지 확인합니다. 긴 지연이나 느려진 움직임을 모두 흡수하면 고장 징후를 놓칠 수 있습니다. DTW 비용과 실제 소요 시간을 분리해서 보고 정렬 경로가 업무에서 허용할 차이인지 판단하세요.
채널의 단위와 크기가 비용을 지배할 수 있습니다. 숫자 범위가 큰 센서가 비교를 좌우할 수 있어 스케일 조정을 검토합니다. 다만 모든 시계열을 개별 정규화하면 절대 크기 차이도 사라질 수 있으므로 목적에 맞게 정하고 평가 자료를 보고 전처리를 맞추지 않습니다.
DTW를 확률이나 완전한 거리로 해석하지 않습니다. 기본 점수는 오류 확률이 아닙니다. tslearn 문서는 DTW가 삼각부등식을 만족하지 않는다고 설명합니다. 일반 거리의 수학적 성질을 전제로 한 검색 최적화를 검토 없이 적용하면 안 됩니다.
긴 기록을 대량 비교할 때 계산량을 확인합니다. 기본 알고리즘은 두 길이의 곱에 비례하는 계산을 수행합니다. 기록 여러 개를 모두 서로 비교하면 비교 쌍도 늘어납니다. 후보 수와 구간 길이를 줄일 방법을 검토하되 근사 방법을 썼다면 정확 계산과 품질 차이를 따로 평가합니다.
주의: 낮은 DTW 비용은 선택한 특징과 정렬 규칙 아래에서 잘 맞았다는 결과입니다. 같은 사건·같은 사람·같은 정상 상태라는 보증으로 사용하지 않습니다.
자주 묻는 질문
Q1. 길이가 다른 시계열도 비교할 수 있나요?
네. 두 시계열의 시간 단계 수는 달라도 됩니다. 각 시점의 특징 차원과 채널 의미는 맞아야 합니다. 온도 기록과 소리 특징을 단순히 같은 길이로 만든다고 의미 있는 비교가 되지는 않습니다.
Q2. DTW 값이 0이면 원본도 완전히 같나요?
아닙니다. 중간 값의 반복처럼 시간 정렬로 흡수되는 차이가 있으면 길이가 다른 기록도 0이 나올 수 있습니다. 원본이 같은지 확인하는 검사와 시간 변형을 허용한 유사성 평가는 구분합니다.
Q3. DTW가 미래 값을 예측해 주나요?
직접 예측하지 않습니다. 두 기록을 비교하는 비용과 대응 경로를 구합니다. 비슷한 과거 패턴을 찾아 예측 시스템에 연결할 수는 있지만 미래 값을 만드는 규칙과 별도 성능 검증이 필요합니다.
Q4. 워핑 창을 넓힐수록 항상 좋은가요?
아닙니다. 허용 경로가 늘면 더 낮은 비용을 찾을 여지가 생기지만 실제로 다른 패턴까지 맞출 위험도 커집니다. 비용 최소화와 정답을 구분하는 성능은 같은 목표가 아니므로 검증 자료와 경로를 함께 봅니다.
Q5. 서로 다른 라이브러리의 DTW 점수를 비교해도 되나요?
그대로 비교하지 마세요. 시점 간 비용, 제곱근, 경로 정규화, 끝점 조건과 제약이 같은지 확인합니다. tslearn 안에서도 기본 dtw와 사용자 지정 비용을 합하는 함수의 반환값은 구분해야 합니다.
출처
마무리
동적 시간 워핑은 속도가 다른 두 시계열의 대응 위치를 찾아 차이를 계산하는 방법입니다. 시간 순서를 지키면서 늘이기를 허용하므로 고정 순번 비교가 놓치는 비슷한 흐름을 찾는 데 도움이 됩니다.
처음에는 세 가지를 확인하면 됩니다. 어떤 시간 차이를 허용할지 정하고, 점수의 정확한 계산법을 읽고, 대응 경로가 실제로 타당한지 살펴보세요. 이 기준을 지키면 DTW를 예측 모델이나 확률 점수와 혼동하지 않고 시계열 비교 도구로 활용할 수 있습니다.
