수치예측 알고리즘 - suchiyecheug algolijeum

- 전 글에서 머신러닝 개요에 대해 알아봤는데,

이번에는 예측의 종류에 대해 알아보고, 간단한 예측 모델링을 알아봅시다.

- 예측(prediction)이란, 데이터 분석 모델이 자신의 답을 도출하는 것을 말합니다.

입력 - 처리 - 출력

라는 함수 형태의 구조를 지니는 모델이 입력 데이터를 받는다면,

내부의 처리 로직에 의해서 데이터를 분석 후 어떠한 값을 출력하는 것입니다.

- 간단하고 조금 개인적으로 예를 들자면,

파블로프의 개 실험으로 예를 들겠습니다.

아무것도 모르는 상태의 개에게, 종을 한번 치고, 이후 밥을 주고,

또 종을 치고 밥을 주고...

이것을 반복했을 때,

이후 종만 쳤을 때도 음식 섭취를 위해 침을 흘린다는 실험입니다.

조금 뜬금없는 예시를 들었는데,

요는 이것입니다.

개를 하나의 함수로 보고,

주변 모든 데이터가 입력 데이터입니다.

시각 청각 후각...

이중 청각에서 오는 독특하고 일정한 형태의 데이터,

즉 종이 울리는 소리라는 데이터가 주어진다면,

이것을 어떻게 해석해야 할까에 대하여,

종 -> 밥 먹을 시간

이란 예측을 개가 해낸 것이죠. (덧붙이자면, 해당 분석 결과에 따라 침을 흘린다는 기능을 실행했네요.)

- 만일, 위와 같은 수식을 우리가 직접 정해서 개의 머릿 속에 코딩해 넣는다면, 그것은 수동적인 조건 형성일 것입니다.

하지만 처음에 개는 이러한 상관관계를 몰랐습니다.

주변 환경의 여러 데이터가 주어지고, '밥'이라는 관심있는 관측치가 주어졌을 때,

그중 반복되고 특징있는 데이터, 즉 종소리가 밥이라는 결과가 오기 전마다 계속해서 반복됨을 깨닫는 순간, 종소리라는 데이터의 중요도, 즉 가중치가 높아지는 것입니다.

반대로 말하자면,

만일 종을 쳤는데도 밥을 주지 않는 일이 많아지면,

개는 이 종을 친다는 데이터가 원하는 결과와 관계가 적은 것이라고 판단할 것이고,

종을 치는 동시에 주인이 춤을 춰야지 밥을 준다면,

또 그러한 정보에 가중치를 주겠죠.(정보의 조합. 입력 데이터의 AND 로직)

이것이 바로 스스로 학습을 하는 머신러닝이라는 것의 추상적인 동작 원리입니다.

- 다시 수학적인 예측 모델로 돌아가봅시다.

(0,2) -> 2

(1,3) -> 4

(2,4) -> 6

(3,5) -> 8

이러한 데이터가 주어졌다고 합시다.

관측치 데이터가 2,4,6,8

인데,

입력 데이터와 예측 데이터간의 상관관계를 알수 있나요?

y = x1 + x2

라고 감으로 쉽게 알아내신 분도 있으실 텐데,

요는 위와 같이 주어진 데이터에서 법칙을 추출하여,

y = f(x1, x2)

와 같은 함수를 만드는 것이 바로 모델링입니다.

- 위의 분석 모델에서,

X 벡터는 입력 데이터,

y를 예측값이라 합니다.

- 분석 모델의 예측은, 예측값의 유형에 따라 크게 두가지로 나뉘는데,

연속성 데이터를 예측하는 것을 '수치예측'이라 하고,

범주형 데이터를 예측하는 것은 '범주 예측'이라고 합니다.

- 수치 예측은 '회귀 문제'의 결과이며,

범주 예측은 '분류 문제'의 결과라고도 할수 있습니다.

- 연속형 데이터 : 가격, 길이, 압력, 두께와 같이, 연속성을 지니는 데이터로, '수치'가 중요한 데이터입니다.

범주형 데이터 : 거짓인가 진실인가, 죽는가 사는가, 동물인가 식물인가... 이렇게 어떠한 클래스에 속하는 데이터로,

    수치보다는, 해당 클래스를 뜻하는 '의미'가 중요한 데이터입니다.

- 회귀(Regression) : 수치형 데이터를 예측하는 문제입니다. 예를들면 주변 상황을 수치화하여, 여러 특징이 주어졌을 때,

    집값이 얼마나 오를것인가에 대한 예측이 회귀입니다.

분류(Classification) : 영어 의미대로 해석하면, 클래스(범주)를 나누는 것입니다. 이것도 역시 수학적으로 어떤 수치를

    도출하는데, 그 수치가 일정 '선'을 넘느냐 아니냐로 클래스를 분류하는 것이 기본입니다. 예를들면 기계의

    여러 센서에서 오는 데이터를 통해 이것이 고장인지 아닌지를 판단하는 것이 분류입니다.

    보다 와닿지만 별로 좋아하지 않는 비유를 하자면, 시험 성적의 상위 몇 퍼센트인가를 기준으로 등급을 매기는

    방식도 역시 분류죠...

- 대표적인 회귀 문제의 예측 모델에 대해 알아봅시다.

토요타 코롤라 중고차 가격 데이터셋을 검색해 보면,

매우 잘 정리된 중고차 거래 데이터가 제공되는데,

관심있는 예측 대상이 중고차 가격(Y),

그에 영향을 주는 여러 특징(Feature)들이 있을텐데,

주행거리, 마력, 용량(CC)과 같은 특징들을 입력 데이터(X)로 둘수 있습니다.

각 특징들은 모두 가격에 영향을 주고,

각각 따로 영향을 주기보다는 모두 복합적으로 이에 영향을 줍니다.

특징들과 결과값이라는 주어진 뚜렷한 데이터 사이의 상관관계를 찾는 것이 바로 분석 모델을 만드는 것으로,

이 모델이 도출하는 예측값이 실제 데이터와도 일치하거나 유사하도록 하는 방법을 찾는 것이 바로 주된 관심사입니다.

(46906, 90, 2000) -> (13500)

(19700,192,1800) -> (21500)

(71138,69,1900) -> (12950)

(31461,192,1800) -> (?)

이렇게 데이터가 주어졌을 때,

네번째 답을 도출한다고 생각해주세요.

뭔가 IQ 테스트 같은 것인데, 위 데이터는 실제 토요타 코롤라 데이터셋에 기재된 데이터입니다.

관심 있으시면 한번 그냥 풀려 노력해도 좋은데, 사실 데이터 분석 모델을 만들때 어떤 데이터를 맞딱드리는지에 대한 맛보기라 생각해주세요.

(힌트라고 한다면, 다른 수치들을 그대로 두고, 한 특징 데이터를 일정량 늘리거나 줄이는 편미분의 원리를 생각해보는 방식이 있습니다. 이 역시 존재하는 분석 방식중 하나입니다. 다만, 이를 위해 필요한 선행 가정이나, 데이터가 충분하지 않다는 것 때문에, 위 데이터만으로는 그럴듯한 분석모델을 만드는 알고리즘은 제한되어있습니다.)

방법은 많고, 앞으로 제가 차차 공부해나가며 하나하나 정리할 것입니다.

물론, 여러 사정 때문에 공부의 방향을 보다 실용적인 것으로 바꾸게 될지도 모르지만...

어쨌건 저게 바로 회귀 문제입니다.

- 분류 문제 예시의 경우엔,

디스플레이 공정 불량여부 파악이 있겠습니다.

만일 공장 자동화를 할때,

매 제품의 제작 공정마다 나타나는 데이터가 존재했을 때,

x1, x2, x3, x4...

이러한 데이터가 어떠한 수치적 양상을 띄는가에 따라,

불량(0), 양호(1)

이렇게 상태를 나타내는 클래스로 나누는 것으로,

이 문제 역시 해결을 위한 여러 방법과 접근법이 존재합니다.

다른 활용법으론, 웹페이지 내에서 고객의 행동 패턴에 따른 클래스를 나누어, 비슷한 유형의 사람끼리 묶고, 이를 이용하여 해당 고객군에게 필요한 정보, 해당 고객군이 흥미를 끌만한 정보를 파악하거나 노출시키는 맞춤형 서비스도 이미 여러 산업군에서 적용하는 서비스죠.

- 위에서 '개'를 예시로 든 이유는,

컴퓨터 뿐 아니라 어떤 생물이든 데이터 분석을 한다는 것입니다.

오히려 컴퓨터가 생물, 인간의 뇌기능을 모방하는 것에서 시작한 것이죠.

데이터 수집 - 데이터 분석 - 데이터 처리 - 데이터 표현...

인간이 살아가는 것... 눈으로 보고 귀로 듣고, 느끼고, 생각하고, 동작하는 것도 어찌보면 프로그래밍적으로도 생각할수 있을 것입니다.

요약하자면, 데이터 분석을 배우면, 인간이 할수있는 많은 지적 활동을 컴퓨터로 구현할수도 있으리라 생각합니다.

- 덧붙이자면, 범주형 데이터를 다룰때는, '의미'라는 것을 잘 생각하셔야 합니다.

예를들어, 제가 예전에 작성한 https://wiserloner.tistory.com/653에서,

저는 0과 1을 퍼셉트론의 입력값과 출력값으로 두었는데,

이는 수치라는 개념보다는 False, True의 의미가 깊습니다.

이렇듯, 부여한 의미에 따라 모델의 의미가 달라지기도 합니다.

// 여기까지, 주말이고 하니 게으름을 피우며 정말 기초적인 내용만 정리했습니다.

사실 저는 데이터 분석을 이렇게 체계적으로 배우는 것은 처음입니다.

매번 머신러닝 관련 필요 지식만 골라서 배운터라, 알고있던 내용이라 할지라도 새롭고 즐겁네요.

무엇보다 데이터 분석이라는 것이 얼마나 활용도가 높은 기술이고, 또한 제가 이제껏 배운 IT 개발과도 연관할만한 여지, 즉 사용할만한 요소가 많은지를 깨닫게 됐습니다.

지금에야 간단한 분석 모델을 몇개 만들 정도지만, 이걸 보다 고도화하는 스킬을 기른다면, 틀림없이 알파고와 같은 고도의 분석 및 학습 동작 머신을 만들수 있으리란 가능성을 느낍니다.

다음부터는 위에서 언급한 회귀와 분류 문제을 해결하기 위해 사용되는 여러 방법에 대해 알아봅시다.