이 일은 몇 달 전 제가 시계열 데이터 (time-series data)를 다루는 분석 프로젝트를 진행할 때 발생했습니다. 데이터셋은 매우 컸습니다 (10년 치 데이터). 저는 파이프라인을 점검하기 위해 표준 프로파일링 도구 (profiling tool)를 사용하고 있었습니다. 도구가 볼륨 컬럼에 대해 3%의 결측치 (missing data) 비율을 보고했기 때문에 모든 것이 괜찮아 보였습니다.
시계열 데이터를 다루는 것이 처음이었기에 저는 그것이 노이즈 (noise)라고 생각하여 크게 신경 쓰지 않았지만, 다운스트림 모델 (downstream models)들이 제대로 작동하지 않았습니다. 그때 무언가 잘못되었다는 것을 직감하고 실제로 데이터를 확인해 보니, 3%의 결측치는 노이즈가 아니었습니다. 사실 그것은 6일 치에 해당하는 결측 데이터였습니다. 문제는 여기서 끝나지 않았습니다. 데이터에 누수 (leakage)도 있었고, 그로 인해 모델의 정확도가 99%에 달했습니다. 또한 연대순 순서 (chronological sequence)가 깨져 있었기 때문에 롤링 윈도우 (rolling windows)와 래그 피처 (lag features)도 엉망이 되어 있었습니다.
돌이켜보면, 적절한 EDA (탐색적 데이터 분석)를 수행했더라면 이런 일은 일어나지 않았을 것입니다. 그래서 저는 연대순 단절 (chronological breaks), 누수 (leakage), 그리고 전역 경계 (global boundaries)에 존재하는 갑작스러운 순차적 스파이크 (sudden sequential spikes)를 잡아내는 tsauditor라는 작은 검증 도구를 만들기로 결심했습니다. 이 도구는 데이터 포인트가 왜 잘못되었는지에 대한 증거와 함께 설명을 추가하고 수정 방안을 제안합니다.
이 프로젝트는 오픈 소스 (open source)이며, 가볍고, PyPI에 등록되어 있습니다. 또한 표준 프로파일링 도구와 tsauditor를 나란히 비교한 예시 노트북을 추가했습니다. 비교 노트북도 확인하실 수 있습니다.
저는 EDA 프로세스를 단순화하고 데이터셋에 대한 커스텀 스크립트 (custom scripts)의 수를 줄이고 싶었습니다.
수정: 도메인 (domain)을 정의하지 않고도 사용할 수 있습니다.
링크는 댓글에 있습니다.
submitted by /u/severecaseofsarcarsm to r/MachineLearning
[link] [comments]