(머신러닝-4) 첫번째 모형 - 선형회귀

본격적인 머신러닝을 수행하기 전에 가장 단순하면서도 파워풀한 모형을 살펴보자.

바로 선형회귀분석 모형이다.

회사에 월별 매출액 및 광고비 데이터가 있다고 가정하자.
데이터를 분석해 보니 결과가 다음과 같다.

년 평균 매출액: 400억
년 평균 광고비: 5억

그런데 갑자기 여러 분에게 사장님이 다음과 같이 물어본다.

"OO 과장! 올해 광고비 얼마써야 할까?"

선형회귀분석 (Linear Regression Model)은 위와 같은 질문에 답할 수 있게 데이터를 설명하는 선(Line)을 찾는 모형이다.

데이터를 나타내는 식은 다음과 같다.
여기에서 데이터를 설명하는 선에 대한 식은 
Y가 매출액, X가 광고비로 놓으면
매출액 = 300 + 20 * 광고비
와 같은 식을 얻을 수 있다.

저 공식이 바로 데이터를 설명하는 모형이고, 분석가가 만들어야 하는 것이다.

일단 위와 같은 공식을 구했다는 가정에서 조금만 더 깊게 들어가 보자.

광고비 10억을 집행하면 예상 매출액은 500억이다.

그런데 실제 매출액이 600억이라면 100억을 잘못 예측한 것이다.

뭐야? 회귀분석이라고 잘 맞추지도 못하네? 100억이나 잘못 예측했자나?

만약에 우리가 저 회귀식을 몰랐다면 우리의 의사결정은 "평균"으로 할 수 밖에 없다.

년 평균 매출액이 400억이니까 올해도 평균 수준은 되지 않을까요?
라는 식으로 밖에 데이터를 활용하지 못할 것이다.


해당 식을 통해 위의 상황을 정리해 보면

ST = 600억(실제) - 400억(평균) = 200억
SR = 500억(예상) - 400억(평균) = 100억
SE = 600억(실제) - 500억(예상) = 100억

맨앞에 S는 Sum을 의미하므로 단건은 위와 같이 ST,SR,SE로 표현하면 된다.

여기에서 반드시 이해해야 하는 것이 있는데,
우리가 회귀식을 몰랐다면 평균인 400억으로 의사결정을 해야 하므로 오차가 200억이 발생할 것이다.
그런데 회귀식으로 인해 오차가 100억이 줄어든 것이다. 
즉, 평균으로 의사결정할 때 보다 회귀식을 이용하면 오차를 50%나 줄일 수 있다.
거꾸로 얘기하면 50%나 더 잘 설명했다고 말할 수 있는 것이다.
(대단하지 않은가? ㅋㅋ)

그리고, 저 식을 가만히 보면
ST = SR + SE 가 된다.

모든 경우의 수의 합(sum)을 계산하면
SST = SSR + SSE 이 된다.

그래서 회귀분석에서는 결정계수 R2 (알 스퀘어)라는 것이 있는데
로 표현한다.

즉, 전체 오차의 합과 제대로 설명하는 부분 합의 비율을 나타낸 것이다.

그래서 결정계수가 50이라면 이 회귀식으로 50% 확률로 예측할 수 있다고 말할 수 있다.

그럼 지금까지 알고있는 이론을 가지고 R이라는 언어로 회귀분석을 해보자.

너무 쉽게 구할 수 있다. 이렇게 데이터가 있고, 도구의 사용법만 알면, 이런 작업은 쉽게 할 수 있는 것이다.

Spark vs. Tensorflow

위의 선형 회귀분석을 Spark로 처리하면 다음과 같다.
Spark는 Hadoop 기반 언어이기 때문에 자연스럽게 빅데이터 처리를 지원한다.
하지만 Spark는 Deep Neural Network를 지원하지 않는다.

위의 선형 회귀분석을 Tensorflow로 처리하면 다음과 같다.
아쉽게도 아직 Tensorflow는 Hadoop을 지원하지 않는다. 하지만 Deep Neural Network를 모두 지원한다.

Spark와 Tensorflow 모두 GPU를 지원한다.
GPU는 빠르게 처리할 수 있을 뿐, 빅데이터를 지원하지 않는다. ㅜ_ㅜ

빅데이터 시대에서 빅데이터(Hadoop 즉, 분산병렬처리 & MapReduce)를 지원하지 않으면 한계가 있는 건 아닐까?

그래서 우리는 공부를 해야한다. 통계학을 공부하면 빅데이터의 도구에서 자유로워 질수도!

그래서 이번 블로그에서는 Tensorflow로 머신러닝을 진행해 보겠다.



댓글

주간 인기글

SPA(Sigle Page Applications) 란 무엇인가?

[MySQL] DB Time Zone 변경

구글 애널리틱스에서 API 로 데이터 받아오기

Nodejs 날짜 관련 유용한 moment.js

[ubuntu] 신규 계정에 sudo 권한 추가하기