DATA Engineering for AI Research

안녕하세요? 크래프트테크놀러지스 AI Research Team에서 데이터 엔지니어링을 담당하고 있는 권혁환입니다.

오늘은 QRAFT AI Research Team이 다루고 있는 데이터 파이프라인 이야기를 해볼까 합니다.

논리적 물리적인 설계를 통틀어,

저희 팀은 어디에 포인트를 두고 데이터베이스를 운영하고 있는지 간략하게 설명드리겠습니다.

일반적으로 데이터베이스(이하: DB) 설계에 있어 고려해야 할 부분은 굉장히 많습니다. 아무리 마이크로 서비스라고 해도 단순 수집과 적재로만 DB를 유지하기에는 무리가 있습니다.

개념적, 논리적 모델링 단계를 통틀어 스키마 (엔티티, 속성, 관계 정의), 무결성, 일관성, 확장성, 복구/보안 그리고 좀 더 나아가 효율성까지 고려해야 비로소 마음 놓이는 서비스 운영이 되는 것 같습니다.

[출처: QRAFT Technologies AI Research Team]

[출처: QRAFT Technologies AI Research Team]

다만, 그 모든 것을 만족시키기에는 어려울 듯하고, 경중은 있는 것 같습니다.

그 무게중심은 소비자가 사용하는 데이터(여기서 소비자는 저희 팀원입니다)가 어떤 데이터인지, 또 무엇을 중요시하는지에 따라 많이 달라지는 것 같습니다.

저희 팀 내 사용하는 데이터 대부분이 금융 데이터(국내외 주식, 거시경제, 환율, 원자재 등등)이고, 사용 목적은 딥러닝 모델 학습입니다.

금융 데이터 특성상 시계열 데이터가 다수인데요. 파이프라인 설계 시 위와 같은 점을 고려해야지만, 팀 내 “사용자들의 목적”에 초점을 두어 아래와 같이 우선순위를 정하고 설계하였습니다.

[출처: QRAFT Technologies AI Research Team]

[출처: QRAFT Technologies AI Research Team]

첫째, 데이터의 무결성

일반적으로 금융 시계열 데이터는 짧으면 틱, 초, 분 단위로 길면 일, 월, 분기 단위로 업데이트됩니다. 학습 시에도 일정 타임 프레임 단위로 INPUT 데이터를 넣어주는데요.

모 시점 기준으로 데이터가 없거나, 결측치가 발생하면 학습 결과의 신뢰성에 영향을 줄 수밖에 없습니다.

이에, 같은 데이터가 들어오더라도 해당 데이터가 맞는지 혹은 빈값이 없는지 확인하는 Validator를 넣는데요.

주식 재무데이터를 예로 들어보면 데이터 제공사에서 1차적으로 들어온 데이터를 인베스팅닷컴, 야후파이낸스, 퀀들 등의 웹 혹은 API기반 소스와 비교 검증합니다. 이상치나 결측치 발생 시, Validator 알람으로 예외처리를 주고 있습니다.

여기서 주의할 점은, 동일 종목의 동일 재무데이터라고 해도 결산일(FISCAL YEAR)기준인지 역년(CALENDAR YEAR)기준인지, 또 Reported 기준인지 Trailing 기준인지 아님 예측치(Forward) 기준인지에 따라 매우 상이한 데이터와 결과값이 들어온다는 것입니다. 동일 항목을 비교할 때도 데이터 속성을 잘 살펴볼 필요가 있겠습니다.

두 번째, 데이터의 확장성

어느 데이터나 향후 발생할 확장성에 대해 기준을 잡고 설계가 이루어 집니다. 저희가 취급하는 금융데이터의 경우 횡적 확장(horizontal)과 종적 확장(vertical)을 고려해볼 수 있겠습니다.

횡적 확장은 시계열 특성상 시간이 지남에 따라 쌓이는 새로운 데이터를 말하고, 종적 확장은 종목들의 확장으로 볼 수 있겠습니다. 여기서는 이해하기 쉽게 주식데이터를 예로 들어 보겠습니다.

주식 종목의 경우, 미국(뉴욕거래소, 나스닥)은 약 5,000여개, 한국(ETF포함)은 약 2,800여개 종목들이 상장되어 있고 하루에도 수개의 종목들이 상장 및 폐지가 되고 있습니다.

따라서 종목명 및 속성이 포함된 META 데이터를 일별로 관리하고 있습니다. 이를 기준으로 종적인 확장을 진행 및 검증하고 있습니다.

[출처: QRAFT Technologies AI Research Team]

[출처: QRAFT Technologies AI Research Team]

세 번째, 데이터 사용의 효율성

데이터 저장 및 백업은 관계형 데이터베이스(RDBMS)와 file system을 이용하고 있고, 적재된 데이터는 서버 컴퓨터 메모리에 올려 Socket 통신으로 출력(사용)하고 있습니다.

내부 테스트 결과 RDBMS나 NoSQL에 DB를 적재하고 쿼리형식으로 불러와서 사용하는 것 보다 약 4.1배 이상의 속도 차이를 보였습니다.

일반 파일 시스템 단순 로드 시에도 마찬 가지입니다. file system은 pickle(python 내부 모듈) 확장자 위주로 저장하고 있는데요. 파일용량이 늘어나면 파일별 입/출력의 시간도 기하급수적으로 차이가 나게 됩니다.

저희가 테스트 한 결과 HDF5 파일이 읽기 속도가 빨랐고, 쓰기는 pickle이 가장 우수한 성능을 보였습니다. 사용성까지 고려해봤을 시, pickle 확장자가 가장 안정적인 퍼포먼스를 보여 현재 pickle 확장자를 적극 활용 중입니다.

[출처: QRAFT Technologies AI Research Team]

[출처: QRAFT Technologies AI Research Team]

이상, QRAFT AI Research Team DB관리 포인트를 살펴 보았습니다.

감사합니다.

alvin kwon