컴퓨터가 학습을 한다? 이제 더 이상 새롭지 않은 개념이죠. 데이터 분석 분야에서 컴퓨터가 학습하는 것을 머신러닝이라고 합니다. 컴퓨터가 그러면 학습을 어떻게 할까요? 우선 컴퓨터가 할 수 있는 것부터 살펴보시죠. 컴퓨터는 사실 큰 계산기에 불과합니다. 덧셈과 곱셈 등을 수행하죠. CPU는 빠르게 덧셈과 곱셈을 수행하고 Memory는 이를 저장하는 역할을 합니다. 그러면 우리가 쓰고, 보고, 듣는 정보들은 어떻게 컴퓨터에 입력되고 또한 출력되는 것일까요? 쉽게 말하면 컴퓨터가 이해할 수 있도록 문자, 음성, 사진 등을 숫자로 변환하는 과정이 필요하고 다시금 컴퓨터가 연산하고 저장한 것을 사람이 이해하기 위해서는 숫자를 문자 등으로 변환해야 합니다. 사람이 컴퓨터가 이해할 수 있도록 숫자로 입력하는 것을 모스 부호치듯이 넣지는 못하므로 보통 프로그래밍 언어를 쓰는데요 이를 컴파일러(compiler)라고 부릅니다.
그러므로 컴퓨터에 학습을 시키기 위해서는 일단 소통할 수 있는 프로그래밍을 보통 활용해야 합니다. 여러 가지 프로그래밍 언어가 있지만 여기서는 Python을 통한 머신러닝 분석 사례를 말씀드려보겠습니다. 그렇다면 머신러닝을 통해서 해결 가능한 문제는 무엇이 있을까요? 즉, 어떤 질문을 답하기 위해서 머신이 학습을 하는가?에 대한 답변 입니다. 첫 번째 질문은 ‘이것은 A인가, B인가?”입니다. 이 질문에 답하는 알고리즘을 분류 알고리즘(Classification 알고리즘)이라고 합니다. 여러 무리(class) 중에서 무엇이 정답인지 찾아내는 절차를 가리킵니다. 가장 간단한 알고리즘은 사진 속 동물이 고양이인가 강아지인가 식입니다. 조금 더 복잡한 형태를 보면 신규 고객은 기존 회원 중 누구의 행동 패턴과 비슷한가?를 볼 수 있습니다.
두번째 질문은 “이것이 일반적인가? 특별한가? 입니다. 이 질문에 답하는 알고리즘을 이상(Anomaly) 감지 알고리즘 입니다. 가장 대표적인 사례가 신용카드사의 변칙적 사용 모니터링입니다. 늘 집 근처 마트에서 20만원 가량만 쓰던 신용카드로 초호화 리조트에서 2,000만원을 결재하면 신용카드는 이상징후를 발견합니다. 이뿐만 아니라 지진 등 재해의 전조를 알아내거나 해킹 공격을 탐지할 때 등에 씁니다. 세번째 질문은 “이것은 몇 개인가? 또는 얼마나 많은가?” 입니다. 이 질문에 답하는 알고리즘이 “회귀“ 입니다. 여러 변수의 규모를 측정하고, 이 규모의 변동 규칙을 파악함으로써 같은 규칙이 적용된다면 변수의 크기가 어떻게 변할지 예측하는 것입니다. 내일 날씨가 몇 도일까? 태풍은 언제 도착할까? 다음 분기 매출은 얼마나 될까? 등 입니다.
네번째 질문은 “이것이 어떻게 구성되어 있는가? 입니다. 이 질문에 답하는 알고리즘이 대표적으로 “군집화 알고리즘 (clustering 알고리즘)” 입니다. 분류화와 군집화는 비슷해보이지만 다릅니다. 분류가 미리 정해진 그룹에 각 개체를 하나씩 구별하는 연역적인 방법이라면, 군집화는 모든 개체를 비슷한 것끼리 묶어 그룹을 만들어내는 귀납적 방법입니다. 데이터 간의 관계 주고를 파악하거나 특정 그룹 안에서 중요하거나 영향력 잇는 노드(node)가 무엇인지 파악할 때 클러스트링이 위력을 발휘합니다. 사회 연결망 분석(social network analysis)나 유사한 자료 패턴을 바탕으로 유비추리하는 협업적 필터링(collaborative filtering) 시스템 등이 많이 쓰입니다.
위와 같은 질문 네 가지를 답할 수 있는 머신러닝 종류를 보통 세 가지(지도학습, 비지도학습, 강화학습 등)를 분류하는데요, 이번 글에서는 지도학습과 비지도학습에 대해서 우선 알아보겠습니다. 지도학습(supervised learning)은 말 그래도 컴퓨터에서 분석 결과에 대해서 “지도”해주는 방법입니다. 결과치(Y) 혹은 목표변수를 컴퓨터에게 알려준다는 의밉니다. 가령, 우리가 1,3,7,10이란 숫자를 어린 아이에게 가르친다고 하면 처음에 아이는 “1”을 보고 “7”이라고 읽을 수 있습니다. 이때 선생님이 “그것은 7이 아니라 1이예요”라고 가르쳐 주는 것처럼, 컴퓨터에게 정답을 알려주고 학습시키는 것이 지도학습입니다. 분류(classification)와 추정(estimation)이 지도학습의 대표적인 알고리즘이며, 분류에서는 로지스틱 회귀(logistic regression), 랜덤포레스트(random forest) 등이 있으며, 추정에는 선형회귀(linear regression)와 회귀트리(regression tree) 등이 있습니다.
<출처:https://busy.org/@urobotics/5bksow>
지도학습이 정답을 알고 학습하는 것이라면 비지도학습(unsupervised learning)은 결과치(Y)와 목표변수를 모른체 학습을 시키는 것입니다. 가령, [원숭이, 토끼], [바나나 ,홍당무]처럼 동물과 과일끼리 묶인 데이터로 패턴을 주었다고 가정해보시죠. 비지도학습으로 이 문제를 푼다면 이에 대한 정답은 동물끼리 묶인 [원숭이, 토끼]로 구분될 수도 있고 아니면 [원숭이, 바나나] 등으로 나눌 수도 있습니다. 이렇듯 정답이 없는 문제를 학습하는 것이 비지도학습이며 서로 비슷한 데이터로 묶어주거나 특이한 데이터를 발견하는 등의 작업에 활용됩니다. 대표적으로 차원축소(dimension reduction), 군집화(clustering), 연관성 규칙 발견(association rule) 등이 있습니다. 차원축소에는 주성분 분석(pricipal component analysis), 요인분석(factor analysis) 등이 있고, 군집화에는 위계적 군집화(hierarchical clustering), K-means clustering 등이 있으며 연관성 규칙 발견에는 시퀀스 분석(sequence analysis) 등이 있습니다. 이와 같은 분석 방법을 알고리즘 혹은 모델이라고 표현할 수 있습니다.
풀려는 문제 목적과 방법이 정해졌으면 컴퓨터에게 어떻게 학습을 시킬까요? 우선 데이터를 훈련용과 성과 대조용으로 구분합니다. 즉, 훈련용 데이터를 데이터 분석 모델에 적용하여 얻은 결과를 대조용 데이터와 비교해서 분석 모델의 성능을 평가하는 것입니다. 그렇게 때문에 있는 데이터를 7:3 혹은 8:2 비율로 구분해서 학습을 시키고, 나머지 데이터로 학습이 제대로 되었는지를 확인하는 것입니다. 이 과정이 바로 학습과 모델 평가 단계 입니다. 위 세가지 프로세스를 Python을 통해서 진행한다고 하면 아래의 그림과 같은 순서와 방법을 활용할 수 있습니다.
[데이터 전처리]에서는 데이터 클린징, 결측값 처리 및 이상치 등을 제고하고요, [데이터 세트 분리]에서는 머신러닝 패키지 중 하나인 사이키런(sklearn)을 활용해서 train_test_split()으로 학습/성과 대조용 데이터로 분리합니다. [모델 학습 및 검증] 단계에서는 알고리즘을 학습시키는데 fit()을 활용하고, [예측수행]에서는 predict()를 통해서 데이터를 예측해봅니다. 그리고 [평가]에서 성과 대조용 데이터로 모델의 정확도를 평가하는데 sklearn.metrics() 등을 쓸 수 있습니다. 이처럼 컴퓨터가 학습하는 것에도 다양한 방법이 있지만 People Analytics 수행을 위해 주로 쓰는 머신러닝 중에서도 지도학습에 대해서 알아봤습니다. 다음 시간에는 회귀 분석을 통해서 성과를 예측하는 방법에 대해서 구체적으로 알아보도록 하겠습니다.
< 머신러닝 지도학습 프로세스: 출처 http://scimonitors.com/%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-%ED%95%99%EC%8A%B5-%EA%B0%80%EC%9D%B4%EB%93%9C/>