2017.06.13

“데이터 입력, 지능 출력” 알기 쉽게 설명하는 머신러닝 파이프라인

Serdar Yegulalp | InfoWorld

머신러닝을 보면 마법의 블랙 박스 같다는 생각이 들곤 한다. 상자에 데이터를 집어넣으면 반대쪽에서 예측이 튀어나온다. 그러나 그 과정에 마법은 없다. 데이터와 알고리즘, 그리고 알고리즘을 통해 데이터를 처리해 만들어진 모델이 있을 뿐이다.

Credit : GettyimageBank

머신러닝을 통해 데이터에서 행동 가능한 통찰력을 끌어내는 일을 하는 사람에게는 이 프로세스를 구체적으로 아는 것이 도움이 된다. 그 상자 내부가 어떻게 돌아가는지 잘 알수록 데이터가 예측으로 변환되는 과정의 각 단계에 대한 이해도를 높이고 예측의 정확도를 향상시킬 수 있다.

데브옵스 사람들은 소스 코드에서 배포에 이르기까지 소프트웨어의 제작 과정을 “파이프라인 빌드”라고 표현한다. 데이터에도 여러 머신러닝 솔루션을 거치는 흐름, 즉 파이프라인이 있다. 이 파이프라인의 구성 원리를 마스터하면 머신러닝을 속속들이 이해할 수 있다.

머신러닝 파이프라인

머신러닝을 위한 데이터 소스와 흡수
위키본 리서치(Wikibon Research) 분석가 조지 길버트의 설명에 따르면 머신러닝 파이프라인은 4단계로 구성된다.

1. 데이터 흡수(ingest)
2. 데이터 준비(데이터 탐색 및 거버넌스 포함)
3. 모델 교육
4. 예측 제공

머신러닝 파이프라인이 시작되려면 교육에 사용할 데이터, 그리고 교육을 수행할 알고리즘, 두 가지가 필요하다. 대부분의 경우 데이터는 다음 두 가지 형태 중 하나로 유입된다.

1. 정기적으로 업데이트되는 예측을 수행하기 위해 이미 어딘가에 수집해서 집계하고 있는 라이브 데이터.
2. 다운로드해서 그대로 사용하거나 ETL 작업을 통해 기존 데이터 소스에서 얻은 “동결된” 데이터 집합.

동결된 데이터의 경우 일반적으로 한 가지 종류의 처리만 수행한다. 즉, 데이터로 모델을 교육하고 그 모델을 배포하고 필요한 경우 정기적으로 모델을 업데이트한다.

그러나 스트리밍되는 데이터의 경우 데이터에서 모델과 결과를 생산하는 방법은 두 가지다. 첫 번째 옵션은 어딘가에 데이터를 저장하고(데이터베이스, 데이터 호수), 나중에 그 데이터를 분석하는 것, 두 번째 옵션은 스트리밍되는 데이터가 들어오는 대로 모델을 교육하는 것이다.

머신러닝 솔루션 제공업체 빅ML(BigML)의 찰스 파커에 따르면 스트리밍되는 데이터를 사용한 교육에도 두 가지 형태가 있다. 한 가지 시나리오는 정기적인 최근 데이터 흐름을 모델에 적용해 예측을 수행하는 경우다. 여기서는 바탕이 되는 모델을 조정하는 일이 별로 없다. 두 번째 시나리오는 시간이 지난 데이터는 의미가 없어지므로 흡수하는 데이터를 사용해 주기적으로 완전히 새로운 모델을 교육하는 경우다.

이러한 이유로 초기에 알고리즘을 선택하는 것이 중요하다. 일부 알고리즘은 증분 재교육을 지원하지만 새 데이터로 처음부터 새로 교육해야 하는 알고리즘도 있다. 모델에 공급할 신선한 데이터를 스트리밍으로 받아 빈번하게 재교육을 해야 한다면 증분 재교육을 지원하는 알고리즘을 선택해야 한다. 예를 들어 스파크 스트리밍(Spark Streaming)은 이와 같은 증분 재교육을 지원한다.

머신러닝을 위한 데이터 준비
교육할 데이터 소스를 확보했으면 다음 단계는 이 데이터 소스를 교육에 사용할 수 있도록 하는 것이다. 사용할 데이터에서 일관성을 확보하는 작업을 일컫는 포괄적인 용어는 정규화(normalization)다.

실제 세계의 데이터에는 잡음이 섞일 수 있다. 데이터베이스에서 가져온 데이터인 경우 데이터베이스에서 일정 수준의 정규화가 자동으로 실행된다. 그러나 많은 머신러닝 애플리케이션은 데이터 호수 또는 기타 균일하지 않은 여러 소스에서 바로 데이터를 끌어오며, 그 데이터 중에는 프로덕션 용도에 맞게 정규화되지 않은 데이터도 있다.

‘파이썬 머신러닝(Python Machine Learning)’의 저자 세바스찬 라슈카가 정규화, 그리고 일반적인 몇 가지 형태의 데이터 집합을 대상으로 정규화를 수행하는 방법에 대해 자세히 쓴 글이 있다. 라슈카가 사용한 예제는 파이썬을 중심으로 하지만 기본 개념은 두루 적용된다.

정규화는 항상 필요한가? MIT 박사 과정에 있는 프랭크 더논코트는 스택 오버플로우(Stack Overflow)에서 이에 대해 자세히 설명하면서 정규화가 항상 필요한 것은 아니라고 말했다. 다만 더논코트도 언급했듯이 “정규화를 해서 손해가 되는 경우는 거의 없다.” 더논코트는 중요한 것은 사용 사례라고 말했다. 인공 신경망의 경우 정규화가 필요하진 않지만, 하면 유용할 수도 있다. 반면 K-평균 클러스터링 알고리즘과 같은 경우에는 정규화가 필수적이다.

‘데이터에서 배우기(Learning from Data)’의 공동 저자 맬릭 매그돈-이스마일에 따르면 “데이터의 규모가 중요한 의미를 가질 때”는 정규화가 맞지 않는다. 예를 들어, “여신 승인에서 부채보다 수입이 두 배로 중요하다면 수입의 규모가 부채보다 두 배로 큰 것이 적절하다”와 같은 경우이다.


2017.06.13

“데이터 입력, 지능 출력” 알기 쉽게 설명하는 머신러닝 파이프라인

Serdar Yegulalp | InfoWorld

머신러닝을 보면 마법의 블랙 박스 같다는 생각이 들곤 한다. 상자에 데이터를 집어넣으면 반대쪽에서 예측이 튀어나온다. 그러나 그 과정에 마법은 없다. 데이터와 알고리즘, 그리고 알고리즘을 통해 데이터를 처리해 만들어진 모델이 있을 뿐이다.

Credit : GettyimageBank

머신러닝을 통해 데이터에서 행동 가능한 통찰력을 끌어내는 일을 하는 사람에게는 이 프로세스를 구체적으로 아는 것이 도움이 된다. 그 상자 내부가 어떻게 돌아가는지 잘 알수록 데이터가 예측으로 변환되는 과정의 각 단계에 대한 이해도를 높이고 예측의 정확도를 향상시킬 수 있다.

데브옵스 사람들은 소스 코드에서 배포에 이르기까지 소프트웨어의 제작 과정을 “파이프라인 빌드”라고 표현한다. 데이터에도 여러 머신러닝 솔루션을 거치는 흐름, 즉 파이프라인이 있다. 이 파이프라인의 구성 원리를 마스터하면 머신러닝을 속속들이 이해할 수 있다.

머신러닝 파이프라인

머신러닝을 위한 데이터 소스와 흡수
위키본 리서치(Wikibon Research) 분석가 조지 길버트의 설명에 따르면 머신러닝 파이프라인은 4단계로 구성된다.

1. 데이터 흡수(ingest)
2. 데이터 준비(데이터 탐색 및 거버넌스 포함)
3. 모델 교육
4. 예측 제공

머신러닝 파이프라인이 시작되려면 교육에 사용할 데이터, 그리고 교육을 수행할 알고리즘, 두 가지가 필요하다. 대부분의 경우 데이터는 다음 두 가지 형태 중 하나로 유입된다.

1. 정기적으로 업데이트되는 예측을 수행하기 위해 이미 어딘가에 수집해서 집계하고 있는 라이브 데이터.
2. 다운로드해서 그대로 사용하거나 ETL 작업을 통해 기존 데이터 소스에서 얻은 “동결된” 데이터 집합.

동결된 데이터의 경우 일반적으로 한 가지 종류의 처리만 수행한다. 즉, 데이터로 모델을 교육하고 그 모델을 배포하고 필요한 경우 정기적으로 모델을 업데이트한다.

그러나 스트리밍되는 데이터의 경우 데이터에서 모델과 결과를 생산하는 방법은 두 가지다. 첫 번째 옵션은 어딘가에 데이터를 저장하고(데이터베이스, 데이터 호수), 나중에 그 데이터를 분석하는 것, 두 번째 옵션은 스트리밍되는 데이터가 들어오는 대로 모델을 교육하는 것이다.

머신러닝 솔루션 제공업체 빅ML(BigML)의 찰스 파커에 따르면 스트리밍되는 데이터를 사용한 교육에도 두 가지 형태가 있다. 한 가지 시나리오는 정기적인 최근 데이터 흐름을 모델에 적용해 예측을 수행하는 경우다. 여기서는 바탕이 되는 모델을 조정하는 일이 별로 없다. 두 번째 시나리오는 시간이 지난 데이터는 의미가 없어지므로 흡수하는 데이터를 사용해 주기적으로 완전히 새로운 모델을 교육하는 경우다.

이러한 이유로 초기에 알고리즘을 선택하는 것이 중요하다. 일부 알고리즘은 증분 재교육을 지원하지만 새 데이터로 처음부터 새로 교육해야 하는 알고리즘도 있다. 모델에 공급할 신선한 데이터를 스트리밍으로 받아 빈번하게 재교육을 해야 한다면 증분 재교육을 지원하는 알고리즘을 선택해야 한다. 예를 들어 스파크 스트리밍(Spark Streaming)은 이와 같은 증분 재교육을 지원한다.

머신러닝을 위한 데이터 준비
교육할 데이터 소스를 확보했으면 다음 단계는 이 데이터 소스를 교육에 사용할 수 있도록 하는 것이다. 사용할 데이터에서 일관성을 확보하는 작업을 일컫는 포괄적인 용어는 정규화(normalization)다.

실제 세계의 데이터에는 잡음이 섞일 수 있다. 데이터베이스에서 가져온 데이터인 경우 데이터베이스에서 일정 수준의 정규화가 자동으로 실행된다. 그러나 많은 머신러닝 애플리케이션은 데이터 호수 또는 기타 균일하지 않은 여러 소스에서 바로 데이터를 끌어오며, 그 데이터 중에는 프로덕션 용도에 맞게 정규화되지 않은 데이터도 있다.

‘파이썬 머신러닝(Python Machine Learning)’의 저자 세바스찬 라슈카가 정규화, 그리고 일반적인 몇 가지 형태의 데이터 집합을 대상으로 정규화를 수행하는 방법에 대해 자세히 쓴 글이 있다. 라슈카가 사용한 예제는 파이썬을 중심으로 하지만 기본 개념은 두루 적용된다.

정규화는 항상 필요한가? MIT 박사 과정에 있는 프랭크 더논코트는 스택 오버플로우(Stack Overflow)에서 이에 대해 자세히 설명하면서 정규화가 항상 필요한 것은 아니라고 말했다. 다만 더논코트도 언급했듯이 “정규화를 해서 손해가 되는 경우는 거의 없다.” 더논코트는 중요한 것은 사용 사례라고 말했다. 인공 신경망의 경우 정규화가 필요하진 않지만, 하면 유용할 수도 있다. 반면 K-평균 클러스터링 알고리즘과 같은 경우에는 정규화가 필수적이다.

‘데이터에서 배우기(Learning from Data)’의 공동 저자 맬릭 매그돈-이스마일에 따르면 “데이터의 규모가 중요한 의미를 가질 때”는 정규화가 맞지 않는다. 예를 들어, “여신 승인에서 부채보다 수입이 두 배로 중요하다면 수입의 규모가 부채보다 두 배로 큰 것이 적절하다”와 같은 경우이다.


X