Must Learning With Statistics

1. R에 대한 소개 본문

MustLearning with R 1편

1. R에 대한 소개

Doublek Park 2020. 1. 29. 18:38

Chapter1. Intro

1. 서론

데이터 분석에 대해 생각을 해보는 시간을 가지고 시작하는 것이 좋을 것 같습니다. 지금 쓰는 글은 무조건적인 사실이기보다는, 평소에 제가 가지고 있는 생각을 쓰는 글이기에 가볍게 읽어주셨으면 합니다. 요즘 Big data, Data Scientist, Analyst 등의 단어를 자주 접할 수 있을 것입니다. 기술의 발전으로 인해 방대한 데이터를 분석할 수 있게 되었고, 오랜시간 기록되면서 누적되기만을 반복했던 데이터를 통해 새로운 기술을 개발하고, 인사이트를 얻을 수 있게 되었기 때문입니다.
여기서 기술의 발전은 컴퓨터 장비들의 발전이라고 생각하면 됩니다. 원래 머신러닝, 딥러닝 등 빅데이터 분석 기술의 이론과 알고리즘은 옛날부터 완성되어 있었습니다. 다만, 장비들이 뒷받침을 하지 못해 구현을 못하고 있었을 뿐입니다. 하지만 기술이 발전된 지금, 빅데이터 분석방법론들은 여러 분야에서 빠른 속도로 적용되며, 도입되고 있습니다. 여기서 제가 하고 싶은 말은 이렇게 요약할 수 있습니다.

빅데이터 분석이라고 새롭고 어려운 신기술이 아닌, 기존에 정립되어 있었던 통계학의 연장선일 뿐이다.

또한, 요즘 빅데이터 분석방법론 하면서, 여러 분석 알고리즘을 익히면서 공부하시는 분들을 많이 볼 수 있습니다. 하지만, 전 그런 공부법이 그리 좋다고 생각이 들지 않습니다. 그 이유는 알고리즘을 많이 안다고 해서 해결되는 문제들은 현실에서 많이 없다는 것입니다. 그럼 데이터 분석 학습을 어떻게 해결해야 될까요? 알고리즘을 습득하기 전에 선행되어야 하는 사항들은 다음 3가지로 정리할 수 있습니다.

  1. 데이터 분석의 목적과 경쟁 상대

    먼저, 분석의 목적은 당연히 돈입니다. 먹고 살려고 공부하고, 일하는 것처럼, 데이터 분석을 활용하여 돈을 더 벌어올 수 있도록 예측 분석을 적용한다던지, 데이터를 정리하고, 분석하여 실무 프로세스에서의 구멍을 발견하고, 비용을 줄인다 등의 효과를 기대할 수 있습니다. 말이야 쉽고 멋있습니다. 하지만, 이걸 실제로 성공시키기에는 알고리즘만 적용시킨다고 할 수 있는게 아닙니다. 돈이 되는 분석을 하기 위해서는 현장에서 수년, 수십년간 쌓인 노하우와 프로세스를 이기는 것이 가장 중요합니다. 하지만 인간들이 이제까지 쌓아 올려 최적화시켜둔 실무 프로세스들은 언뜻 보기에는 비효율처럼 보여도, 생각보다 결과는 괜찮습니다. 즉 데이터 분석으로 이겨내기에는 만만한 상대는 아닙니다. 즉, 한마디로 정리하자면, 데이터 분석의 경쟁 상대는 이제까지 실무에 적용되어 있는 노하우와 프로세스입니다. 이것을 극복하지 못하면, 데이터 분석은 안하니만을 못한 상황이 되기 마련입니다.

  2. 도메인에 대한 충분한 이해

    그렇기에 실무(현장, 도메인)에 대한 이해가 완벽한 상태에서 데이터 분석을 적용시켜야 의미가 있는 분석이 됩니다. 예를 들어 이런 상황이라 할 수 있습니다. 요즘 데이터 분석에 대한 관심이 높은 상황에, 많은 대학교에서 빅데이터 분석학 커리큘럼을 구성하여, 대학원 코스를 구성하고 있습니다. 당연히 이런 대학원 학과에 관심이 가는 사람들도 많을 것입니다. 하지만 신생학과이기도 하고, 정보도 별로 없어 의혹은 생기고, 진학 전에 고민을 가지는 사람을 많이 봤습니다. 전 이런 분들께 이렇게 말해드리고 싶습니다. 만약, 금융권에서 빅데이터 분석을 하고 싶다. 그럼 빅데이터 융합 대학원이 아닌, 경영, 경제, 산업공학과에서 금융을 연구하시는 교수님한테 가서, 빅데이터 분석을 하시길 바랍니다. 도메인에 대한 이해가 부족한 상황에서의 분석은 말그대로 삽질하는 거랑 다를게 없습니다. 그냥 간단하게 막대그래프, 파이차트 등 그려주면서 평균값이 몇입니다. 라고 보고 하는 것이 더 효과가 좋을 수가 있습니다. 그러니 꼭 일하고 싶은 분야에서의 도메인을 충분히 익히시길 바랍니다.

  3. 통계학에 대한 충분한 이해

    머신러닝이니 딥러닝이니 뭐니 해도, 어차피 다 확률을 기반으로 한 통계분석의 연장선입니다. 통계학에 대한 충분한 이해 없이는 머신러닝 및 딥러닝을 공부한다해도 그건 ‘흉내’ 내는거지, 안다고 할 수가 없습니다. 예를 들어 이런 상황입니다. 딥러닝을 공부하시는 분들이라면, 시그모이드(sigmoid)라는 활성화 함수를 듣거나 알고 계실 것입니다. 하지만 이 활성화 함수가 통계학에서의 로지스틱 회귀분석, 즉 Odds Ratio에서 기반한 것은 모르는 분들이 있습니다. 이건 시그모이드 활성화 함수가 어떻게 만들어졌는지는 관심도 없고, 그냥 남들이 그렇다 하니깐 그렇구나 한 것이라고 할 수 있습니다. 그러니 빅데이터 분석학을 공부하기 전에 통계학을 깊이 있게 공부하시길 바랍니다.어차피 통계학에 대한 충분한 이해 없이는 머신러닝, 딥러닝을 아무리 공부해도 잘 이해가 되지는 않을 것입니다.

그래서 데이터 분석이 가뜩이나 어려운데, 효과를 보기도 힘들어? 그럼 공부를 해? 말아?

해야합니다. 몰라서 못하는 것이랑, 알면서 안하는 것이랑은 완전히 다른 문제입니다. 무엇보다 데이터 분석 방법론들을 공부하면서, 데이터를 보는 시각을 익히는 것이 더 중요합니다. 가끔 “세상 사는데 돈계산만 잘하면 되지, 그 어려운 수학은 왜 공부시키는 거야.” 라고 조금은 논란이 발생할 수 있는 말을 하시는 분들을 볼 수 있습니다. 여러분들도 아시다시피, 수학을 공부하는 이유는 돈계산이 아니라, 논리에 따라 생각하는 힘을 키우는 것에 있습니다. 데이터 분석도 마찬가지입니다. 데이터는 어느 분야를 막론하고 항상 마주하게 됩니다. 하지만 데이터를 눈에 보이는대로 결론 내고 그 수준에서 멈출 것인지, 아님 더 나아가 데이터에서 새로운 인사이트를 도출해낼 것인지. 그것은 데이터 분석방법론을 공부하면서 터득한 사고력과 센스가 뒷받침되어야 가능한 일입니다. 그러니 꼭 공부하시길 바랍니다.

마지막으로, 이 책에서는 위 3가지 사항에 대한 답을 다 알려주지 못합니다. 세상은 너무 복잡하고 다양하기 떄문에, 귀납법으로 정리하기에는 어려운 부분이 많습니다. 또한 저도 아직 공부해야 될 것이 많기 때문입니다. 하지만 마지막에 언급한 데이터를 보고 사고를 해내는 방법에 대해서는 제대로 다룰 수 있습니다. 그 부분을 집중 삼아 책을 작성하도록 하겠습니다.

2. R에 대한 소개

R을 왜 공부해야 하는가?

R은 철저히 데이터 분석을 위한 무료 분석 Tool입니다. 많은 회사에서는 엑셀을 이용하여 데이터 정리를 하고 보고서를 작성합니다. 엑셀은 매우 뛰어난 프로그램입니다. 그리고 다양한 기능을 내포하고 있습니다. 하지만, 다양한 기능을 보유하고 있다는 것은 ’깊이’는 떨어진다는 소리와 맥락이 같습니다. 사실 일반적인 업무에서는 R이 크게 필요한 상황은 없을 것입니다. 하지만, ’통계적’으로 무언가를 해보고 싶다면, 확실한 것은 엑셀로는 한계점에 부딪히길 마련입니다. 그럴 때 R이던 Python이던 어떤 언어를 통해 통계적인 기법을 적용시켜야 합니다.

엑셀의 단점

  • 대용량 데이터에 대해 처리가 힘듭니다.

    엑셀의 가장 큰 문제입니다. 대용량 데이터에 대해서는 엑셀을 키는 것만 해도 매우 큰 시간이 소비되며, 잘못 건드리면 프로그램이 먹통이 되어버리는 현상까지 심심치않게 발생합니다.

  • 엑셀로 할 수 있는 데이터 분석은 제한적이다.

    간단한 빈도 분석을 하는 경우는 상관이 없지만, 조금 더 고급적인 분석과 시각화를 하기에 엑셀은 매우 한정적인 기능을 보유하고 있습니다.

R의 장점

  • 엑셀에 비교하여 대용량 데이터 처리가 능합니다.

    대용량 데이터 처리는 사실 SQL을 이용해서 진행하는 것이 가장 좋습니다. 하지만, 데이터 분석을 하려면 R, Python, Spss, SAS등의 분석프로그램을 사용해야 합니다. SQL은 DB작업 용이지, 데이터 분석용은 아닙니다.

  • 명령어 체계가 매우 자유롭다

    R의 장점이자 단점입니다. 문법이 매우 자유로우며, 자바스크립트가 표준 국어사전을 따른다면, R은 부산 사투리도 알아 듣는 수준이라고 생각하시면 편합니다.

  • 오픈 소스(무료) 및 가벼운 프로그램

    대부분의 함수는 필요한 패키지를 통해 돌릴 수 있습니다. 프로그램이 타 프로그램에 비해 매우 가벼우며, 프로그램 운영 상에서의 오류(환경 설정, 설치 상의 오류 등) 발생 확률이 극히 낮습니다. Python 버전이 바뀔 때 마다, 윈도우 버전이 바뀌는 경우, 필요한 Module들의 정상적 기능이 가능한가 불가능한가는 항상 극심한 스트레스를 발생시킵니다. R은 그런게 없습니다.

R의 단점

  • 메모리를 많이 잡아먹습니다.

    R을 돌릴 때 컴퓨터의 Ram용량은 꽤나 중요한 요소입니다.

  • 연산속도가 빠른 편은 아닙니다.

    자동문을 적용할 때, R이 타 프로그램에 비해 빠르게 계산하지는 않습니다.

  • 새로운 패키지를 사용할 때, 열심히 패키지 설명서를 읽어야 됩니다.

어떤 프로그래밍 언어를 공부해야 될까?

  • 데이터 분석관련 직무를 원하시는 경우, SQL은 필수입니다.

    분석을 하려면 일단 데이터를 원하는 조건으로 가져와야합니다. 많은 데이터는 SQL 서버에 저장되어 있습니다.

  • 데이터 분석을 하려면 유료 툴을 제외하고서는 R, Python 중 1개를 택해야 됩니다.

    둘 다 하면 좋지만, 이 글을 보시는 분들은 아직 2개를 모두 다룰 수 있는 단계가 아닐겁니다. 그러면 자신이 하고 싶어하는 것에 더 부합하는 언어부터 하는 것이 맞습니다.

    • R : 데이터 핸들링 및 통계 모델링, 기계학습 & 시각화
    • Python : 기계학습, 딥러닝, 강화학습 등 개발

    가볍게 데이터 분석을 실무에 적용시키기에는 R이 더 적합합니다. 같은 분석을 한다고 쳤을 때, 통계분석에 한해서는 R이 Python보다 코드를 간결하게 짤 수가 있습니다. 대신, 개발쪽으로 넘어가면 R보다는 Python이 더 적합합니다. (사실 Python을 통한 개발은 윈도우 운영체제를 사용하는 것부터가 애러사항이기 때문에 리눅스 운영체제의 가상 머신을 설치해야되는 등 머리가 많이 아픕니다. 즉, 입문자입장에서는 제대로 무엇을 해보기 전에 머리가 엄청 아픕니다.)

    정리하자면, 통계분석을 입문하는 입장에서는 Python보다는 R을 추천하는 입장입니다. 통계학도 어려운데, 코드 및 외부 요건도 어려우면 공부하는데에 있어, 난관이 매우 많습니다. 흥미를 붙일 때까지는 R을 활용하면서 데이터 분석에 익숙해지는 것이 좋습니다.

3.일상생활 속에서 축척되는 데이터 그리고 통계학

본격적으로 시작하기에 앞서, 간단한 예시를 들어 통계학의 가장 기본이 되는 확률에 대해 다루어보도록 하겠습니다. 갑자기 등장한 수식에 어렵고 당황스러울 수도 있지만, 이 정도는 숙지를 하지고 계셔야, 다음에 통계학 이론이 등장하였을 때 어렵지 않게 적용할 수 있을 것입니다.

최근 회사에 지각하는 일이 잦아진 “A”는 사수한테서 일찍 다니라는 잔소리를 받았다. 그날 퇴근 후 “A”는 달력을 키고 기억을 더듬어가며, 출근 내역을 기록해보았다. 기록이 끝난 “A”는 본인도 놀랄 만큼의 빈도로 지각을 자주 하고 있다는 점을 깨달았다. 이래서는 안되겠다라고 다짐을 한 “A”는 매일 매일 자신의 출근 정보를 기록하기 시작하였다. 가장 먼저 시작한 작업은 기록할 사항(요인)들을 정하는 작업이었다. “A”는 자신의 경험에 기반하여 다음의 사항(요인)을 한달동안 꾸준히 기록하기로 했다. (여기서, 어제의 출근상황은 오늘의 출근에 영향을 주지 않으며, 오늘의 출근은 내일의 출근에 영향을 주지 않는 독립성을 가정합니다. 또한, 각 교통편의 선택, 날씨, 알람 기상시간 등은 모두 독립적으로 적용 됨을 가정합니다.)

데이터(자료)의 수집과정

  • 날짜 : 년/월/일
  • 기상시간 : 알람 시간 준수 여부
  • 교통편 : 지하철/버스/택시
  • 날씨 : 맑음/비\(\cdot\)눈
  • 지각여부 : O/X

확률의 계산

“A”는 매일매일 빠짐없이 자신의 출근기록을 입력했으며, 1달이 지난 다음 30일 간의 출근 기록을 분석해보기로 마음을 먹었다. 하지만 이제까지 데이터 분석을 제대로 해본 적이 없는 “A”는 데이터는 있으나, 무엇부터 시작해야할지도 막막해졌다. 엑셀로 지각을 몇 번 했는지 구해보는 것이 전부였다. 결국 주변에 의학통계분석 연구에 매진하고 있는 “H”에게 도움을 요청하였다. “H”는 “A”에게 먼저 확률부터 구해보자고 하였다.

확률은 수집된 데이터의 수대비 관심사항(지각여부)가 얼만큼 기록되었는지로 계산을 합니다. (지각여부(Event)를 편하게 \(E\)로 표기합니다.)

\[ P[E=1]=\frac{지각\ 횟수}{데이터\ 수집일} = \frac{n(E=1)}{n(E=0 \ or \ E=1)} \\ P[E=0]+P[E=1]=1\\ P는 \ proability를 \ 의미, \ n은 \ 갯수를 \ 의미 \]

이러한 확률들을 우리는 사전확률이라고 부릅니다.

수집 된 데이티에서 계산을 진행해본 결과, \(\frac{8}{23}\)으로, 평상시에 지각을 할 확률은 \(34.7%\)정도입니다. 하지만, 이 정도의 정보는 “A”도 엑세로 충분히 쉽게 구할 수 있는 정보입니다. 그래서 “A”는 이런 간단한 값말고 좀 뭔가 더 알아낼 수 없을까라는 의문을 가지게 될 것입니다.

여기서 “H”는 상황에 따라, 지각할 확률을 계산해보자고 제안한다. 예를 들어, 선택한 교통편에 따른 지각확률을 계산하는 것이다.

이런 확률계산을 ’조건이 주어진 상황에서 상황이 발생할 확률’이라고 해서 조건부 확률이라고 합니다.

\[ P[E =1|T =Bus] = \frac{P[E =1 \cap T=Bus]}{P[T=Bus]} \]

  • 여기서, \(P[E=1,T=Bus]\)는 버스를 탔을 때 지각을 한 경우에 대한 확률을 의미합니다. 이러한 확률을 결합확률이라 합니다.

\[ P[E = 1\cap T =Bus]= \frac{n(E=1\cap T=Bus)}{n(E=0 \cup E=1)} = \frac{3}{23} \] 여기서 구한 경우의 수에 버스를 선택할 확률\((P[T=Bus])\)를 나누어 주면, 특정 조건 하에서 사건이 발생하는 확률을 구할 수가 있습니다. 만약 두 사건(지각여부, 교통편)이 독립이라면 결합확률을 구하는 공식은 다음과 같습니다.

\[ P[A \cap B] = P[A]P[B] \]

하지만 두 사건이 독립이 아닐 때는, 결합확률은 다음과같이 정의가 됩니다.

\[ P[A \cap B] = P[B|A]P[A]=P[A|B]P[B] \]

\[ P[E =1|T =Bus]=\frac{P[E=1 \cap T=Bus]}{P[T=Bus]} = \frac{3/23}{7/23} = \frac{3}{7} \]

이경우, 교통편에서 버스를 선택(관측)한 후, 지각확률을 계산하였다는 의미로 사후확률이라 정의합니다.

반대로 H는 지각을 했는데 버스를 탔을 가능성에 대해 계산을 해보자고 제안을 한다.

\[ P[T=Bus|E=1] =\frac{P[T=Bus \cap E=1]}{P[E=1]}\\= \frac{P[E=1|T=Bus]P[T=Bus]}{P[E=1]} \]

\[ \frac{3}{7}*\frac{3}{23}/ \frac{8}{23} = \frac{0.06}{0.34}=0.17 \] 이렇게 사건이 발생하였을 때, 경우에 따른 가능성을 계산하는 것이면 이를 가능도(우도)라고 합니다. 여기까지 다룬 확률들의 종류를 정리하면 다음 표와 같습니다.

확률을 기반으로 한 통계학은 이렇게 일상생활 속에 녹아있습니다. 우리는 이러한 점을 항상 유념하여 데이터 분석의 기반이 되는 통계학을 공부해야되며, 워밍업을 위하여 위 케이스를 살짝 다루어 보았습니다. 여기서 강조하고 싶은 것은 같은 데이터라 할지라도, 통계학 지식의 수준에 따라 다르게 보일 수 있다는 점입니다.

4.데이터 분석의 프로세스

  1. 데이터 분석의 과정은 요리의 과정과 비슷합니다.

    이번에는 데이터 분석의 진행방식에 대해 다뤄볼까 합니다. 데이터 분석은 흔히 ‘요리’와 비교할 수가 있습니다. 여러분들이 알고 계시는 요리의 프로세스를 간단하게 요약하자면, ’재료 공수’, ‘재료 파악’, ‘재료 손질’, ‘요리’, ’시식’의 과정으로 정의를 내릴 수가 있습니다. 여기서 가장 중요한 것은 요리에 쓰일 재료의 특성을 정확하게 파악하고 있는 것입니다. 모든 재료에는 그에 알맞는 손질법과 가공법이 있습니다. 우리는 그 매뉴얼만 잘 따르면 되는 것입니다. 데이터도 마찬가지입니다. 우리는 데이터를 받게 되면, 바로 분석부터 시작하는 것이 아니라, 이 데이터가 어떤 과정을 통해 수집이 되었는지, 어떤 도메인 특성을 지니고 있는지부터 정확하게 파악을 해야합니다. 조금 더 과장하자면, 성공적인 데이터 분석은 바로 이 첫단계에서 갈린다고 생각해봐도 무리가 없습니다. 데이터의 타입은 매우 다양합니다. 빅데이터 분석의 핵심인 IoT센서 데이터부터 시작하여, 마케팅을 위한 고객정보 데이터, 도로혼잡도 예측을 위한 교통 데이터 등 매우 다양합니다.

  2. 데이터 분석의 80 ~ 90%는 전처리과정이 해당이 된다.

    데이터의 특성을 파악하셨다면 다음으로 확인해야 되는 부분은 데이터가 어떤 변수들로 구성되어 있는지 확인을 하는 작업입니다. 데이터에 포함되어 있는 변수들의 특성에 따라 데이터 핸들링 방법이 결정이 되며, 더 나아가 결론 도출을 위해서는 어떤 분석 모델을 적용해야하는지도 바로 연결이 될 정도로 중요합니다. 변수의 특성을 파악하고 어떤 분석 모형까지 적용할지 결정이 되었다면, 그 뒤 작업들은 일사천리로 끝나게 됩니다. 정해져있는 매뉴얼에 따라 분석을 진행하면 되기에, 오히려 앞단에서 진행했던 핸들링(데이터 전처리)작업보다 더 수월하게 끝낼 수도 있습니다. 명심하시길 바랍니다. 모든 데이터 분석의 업무량을 100으로 잡았을 때, 그 중 80 ~ 90은 바로 데이터 전처리 작업이 해당됩니다.

  3. 어떤 분석이 데이터 분석을 망치는 요인일까?

    데이터 분석이 망하는 이유에는 여러가지가 있겠지만, 제가 생각했을 때는 ’묻지마 분석’입니다. 흔히들 사람들이 가장 많이 저지르는 잘못은 일단 데이터에 상관분석과 회귀분석을 때려넣고 결과값을 냅니다. 회귀분석에서 요구되는 기본가정들은 싸그리 무시한 채, 일단 분석 결과를 내고 발표를 내는 경우도 많습니다. 다시 한번 말씀드리면, 분석모형은 우리가 정하는 것이 아니라, 데이터의 특성이 알아서 정해주는 것입니다. 그러니 분석을 하기 전에 열심히 데이터부터 공부를 해야합니다. 데이터의 도메인, 변수들의 분포, 전처리를 어떻게 할 것인지.. 그 모든 것이 포함이 됩니다. 가끔, 공부를 열심히 하신 분들이 어렵게 공부한 통계모형, 기계학습 알고리즘 등을 활용하고 싶어, 분석모형부터 정하고 데이터를 만지는 경우도 심심치 않게 있습니다. 이경우도 마찬가지로 데이터 분석이 망하는 지름길입니다. 좀 많이 귀찮더라도 여러분들은 데이터에 대한 충분한 학습을 진행한 후, 분석모형을 적용해야합니다. 그래야 간결하면서도 의미가 있는 분석결과를 뽑아낼 수가 있습니다.

'MustLearning with R 1편' 카테고리의 다른 글

6. R 중급문법 2단계  (0) 2020.01.29
5. R 기본문법 4단계  (2) 2020.01.29
4. R 기본문법 3단계  (0) 2020.01.29
3. R 기본문법 2단계  (1) 2020.01.29
2. R 기본문법 1단계  (2) 2020.01.29
Comments