데이터마이닝, 빅데이터, 머신러닝 (기계학습), 인공지능 (AI), 딥러닝 등의 용어가 요즘처럼 친숙했던 적은 없었습니다. 이런 용어가 더 이상 학계나 첨단 산업분야에만 머물지 않고, 일반인들도 각종 언론이나 소셜미디어 통해서 자주 접합니다. 많은 회사들의 잡포스팅에도 이런 종류의 지식 및 스킬을 요구하는 것이 더 이상 낯설지도 않습니다. 빅데이터 같은 경우는 조금 마케팅 용어로 사용되는 경향이 있지만, 데이터 및 컴퓨팅 기술이 확실히 다양한 분야에서 임팩트를 주고 있습니다.
이런 용어들의 기저에는 '데이터 기반의 문제 해결'이 내포돼있습니다. 데이터 기반의 문제 해결을 간단한 프로세스로 정형화할 수는 없습니다. 다루는 사람에 따라서, 풀어야하는 문제에 따라서 매번 다릅니다. 이 분야에 오래 일했던 분들도 그냥 늘 하던 대로 또는 감으로 데이터 문제를 해결하지, A - B - C - D... 이런 식으로 스텝바이스텝으로 문제를 해결하는 않습니다. (저만 그런가요?) 그렇다면, 비숙련자들은 더 어렵게 느껴질 것입니다. 그래서, 얼핏 떠오르는 생각으로 데이터 문제에 접근하는 방법/프로세스에 대해서 짧게 글을 적겠습니다.
** 미리 밝히지만, 경우에 따라서 모두 다릅니다.
'데이터 문제 접근'을 크게 다음의 5단계로 정리했습니다.
- 데이터 문제 정의
- 데이터 수집 및 이해
- 데이터 정제 및 가공
- 알고리즘 구현 / 모델 학습
- 테스트
첫번째, '데이터 문제 정의'는 해결해야할 문제가 무엇이고 어떤 데이터로 어떻게 해결할 것인가?를 정의/정리하는 것입니다. 데이터 문제 자체는 외부 (보통 기획자들의 요청?)에서 전달받는 경우가 많지만, 데이터마이너가 직접 정의를 해야할 경우도 있습니다. 해결해야할 문제가 명확히 정의됐다면 그 다음에는 이 문제를 해결하기 위해서 해당 도메인을 이해하고, 필요한 데이터를 정의하고 (데이터 정의), 적당한 해결 방법/알고리즘을 탐색/리뷰해야 합니다. 이 단계에서 데이터나 알고리즘을 확정짓는 것이 아니라, 이런 데이터를 가지고 이런 분석 방법으로 해결하면 될 것같다 정도로 (개념적으로) 정리하면 됩니다. 즉, 어떤 데이터 피쳐가 필요하고 (필요할 것같고), 어떤 데이터 모델을 사용할 것인가 정도를 정하면 됩니다.
두번째는 앞에서 정리한 데이터를 직접 수집하는 것입니다. 기존부터 존재하던 데이터나 로그를 받아오는 경우도 있지만, 새롭게 로그 시스템을 만들어야 하기도 합니다. 중요한 점에 첫번째 단계에서는 개념적으로 필요한 데이터 목록을 정리했기 때문에 그런 데이터가 모두 실제한다는 보장이 없습니다. 특히 기존의 데이터 및 로그를 그대로 활용하는 경우라면 실제 데이터 종류에 맞게 앞서 리뷰한 알고리즘도 함께 수정해야 합니다. 데이터의 수집과 함께, 수집된/되는 데이터가 어떤 형태로 어떤 값을 가지는지 및 서로 간의 상관관계나 연관성 등에 대해서 검토/이해하는 것도 중요합니다. 첫번째 단계에서 A, B, C 데이터가 존재한다는 가정하에 D라는 알고리즘을 생각했다면, 실제 A와 C 데이터만 존재한다면 D' 알고리즘을 수정하는 과정을 거칩니다.
세번째는 수집된 데이터를 분석용 데이터로 정제하고 가공하는 과정입니다. 새롭게 로그 시스템을 만들었다면, 분석 친화적으로 설계했겠지만, 기존의 데이터와 로그를 그대로 사용한다면 구상했던 알고리즘/모델에 그대로 사용할 수 없을 가능성이 높습니다. 예를들어, 수치 데이터를 사용해야하는 모델이라면, 텍스트 형태의 로그를 수치 데이터로 변환시켜줘야 합니다. 인풋 범위가 [0 100]이라고 가정한다면, 100을 넘는 데이터는 모두 강제로 100으로 하향 조정한다거나 다른 정규화 과정을 거쳐서 [0 100]에 맞춰야 합니다. 그리고 상용의 분석 프로그램을 사용한다면 많은 경우 matrix 형태의 데이터로 데이터를 변환시켜줘야 합니다. 실제 많은 데이터 문제의 승패는 입력 데이터를 어떻게 잘 정제/가공했느냐에 달린 경우가 많습니다.
네번째는 가공된 데이터로 실제 알고리즘을 구현하는 단계입니다. 군집이 필요하면 클러스터링을, 분류가 필요하면 클래시피케이션을, 실수값 예측이 필요하면 레그레션을... 등과 같이 적절한 알고리즘을 구현해야 합니다. 기존의 통계 패키지를 사용한다면 문제에 맞는 모델을 피팅/트레이닝하는 과정이기도 합니다. 이 단계에서 단순히 프로토타이핑으로 끝날 수도 있지만, 그렇게 프로토타이핑한 것을 실제 서비스에서 바로 사용할 수도 있습니다. 복잡한 분석 프로그램은 실 서비스를 위해서 리팩토링이 필요하겠지만, 하둡 기반의 구현이라면 프로토타입과 실 서비스가 크게 다르지 않습니다.
마지막으로는 다른 접근법도 그렇듯이 실배포 전 테스트 과정입니다. 요즘은 운용 중 상시 테스트가 기본인 시대지만, 어쨌든 새로운 것을 적용하기에 앞서 테스트를 거쳐야 합니다. 기본적으로 정성 테스트와 정량 테스트가 있습니다. 정성 테스트는 뽑힌 데이터를 눈으로 대략적으로 확인하는 과정이고, 정성정량 테스트는 실제 수치로 효과를 측정하는 것입니다. 정량화를 위해서 과거 로그를 바탕으로 오프라인 테스트를 먼저 거치고, A/B (버킷) 테스트로 온라인에서 확인합니다. 오프라인 테스트는 원래 확인하고 싶었던 항목을 그대로 확인하지 못하는 경우가 많기 때문에, 다른 부가적인 요소를 확인해서 대략 유추하는 경우도 허다합니다.
경우에 따라서 다양하게 접근하지만, 대게 '문제 정의 > 데이터 정의 > 데이터 수집 > 데이터 가공 > 모델 학습 > 테스트' 과정을 거쳐서 데이터 문제에 접근합니다. 앞서 문제 정의 과정에서 어떤 데이터를 어떤 알고리즘으로 분석할 것인지를 미리 정리한다고 적었지만, 이는 숙련자에 해당되는 경우입니다. 데이터 문제에 접근하기 위해서 데이터 마인드가 필요하다고 많이들 조언합니다. 맞는 말입니다. 그런데 실제 데이터 문제를 해결하기 위해서는 '데이터 감'이라는 게 더 필요합니다. 그런 감이 있어야지 어떤 데이터를 수집하고 어떻게 풀어갈 것인지를 바로바로 캐치하고, 문제가 발생하면 다른 대안을 시도해볼 수 있습니다. 그런데 이런 데이터 감이라는 것은 결국 경험에서 나옵니다. 많은 데이터를 보고, 많은 알고리즘을 공부하고 적용해보고, 많은 문제를 해결해가면서 생기는 것입니다. 처음에는 조금 어렵겠지만, 하다 보면 늘어납니다. 이게 누구나 데이터 분석가가 될 수 있는 이유이기도 합니다.
조만간 각 항목별로 필요한 것들은 더 자세히 다루겠습니다.
===
반응형