기본 콘텐츠로 건너뛰기

1.1 데이터 분석에 대한 고찰

1.1 데이터 분석에 대한 고찰

본격적인 포스팅을 시작하기에 앞서, 데이터 분석에 대해 생각을 해보는 시간을 가지고 시작하는 것이 좋을 것 같습니다.

지금 쓰는 글은 무조건적인 사실이기보다는, 평소에 제가 가지고 있는 생각을 쓰는 글이기에 가볍게 읽어주셨으면 합니다.


요즘 Big data, Data Scientist, Analyst 등의 단어를 자주 접할 수 있을 것입니다.

기술의 발전으로 인해 방대한 데이터를 분석할 수 있게 되었고, 오랜시간 기록되면서 누적되기만을 반복했던 데이터를 통해 새로운 기술을 개발하고, 인사이트를 얻을 수 있게 되었기 때문이지요.

여기서 기술의 발전은 컴퓨터 장비들의 발전이라고 생각하면 됩니다. 원래 머신러닝, 딥러닝 등 빅데이터 분석 기술의 이론과 알고리즘은 옛날부터 완성되어 있었습니다. 다만, 장비들이 뒷받침을 하지 못해 구현을 못하고 있었을 뿐입니다.

하지만 기술이 발전된 지금, 빅데이터 분석방법론들은 여러 분야에서 빠른 속도로 적용되며, 도입되고 있습니다. 여기서 제가 하고 싶은 말은 이렇게 요약할 수 있습니다.

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

또한, 요즘 빅데이터 분석방법론 하면서, 여러 분석 알고리즘을 익히면서 공부하시는 분들을 많이 볼 수 있습니다. 하지만, 전 그런 공부법이 그리 좋다고 생각이 들지 않습니다. 그 이유는 알고리즘을 많이 안다고 해서 해결되는 문제들은 현실에서 많이 없다는 것입니다.

그럼 데이터 분석 학습을 어떻게 해결해야 될까요?

알고리즘을 습득하기 전에 선행되어야 하는 사항들은 다음 3가지로 정리할 수 있습니다.

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

    • 분석의 목적은 당연히 돈입니다. 먹고 살려고 공부하고, 일합니다.

      • 돈을 더 벌어올 수 있도록 예측 분석을 적용한다.
      • 데이터를 정리하고, 분석하여 실무 프로세스에서의 구멍을 발견하고, 비용을 줄인다.

    말이야 쉽고 멋있습니다. 하지만, 이걸 실제로 성공시키기에는 알고리즘만 적용시킨다고 할 수 있는게 아닙니다. 돈이 되는 분석을 하기 위해서는 현장에서 수년, 수십년간 쌓인 노하우와 프로세스를 이기는 것이 가장 중요합니다. 하지만 인간들이 이제까지 쌓아 올려 최적화시켜둔 실무 프로세스들은 언뜻 보기에는 비효율처럼 보여도, 생각보다 결과는 괜찮습니다. 즉 데이터 분석으로 이겨내기에는 만만한 상대는 아닙니다.

  2. 데이터 분석의 경쟁 상대는 이제까지 실무에 적용되어 있는 노하우와 프로세스입니다.

    이것을 극복하지 못하면, 데이터 분석은 안하니만을 못한 상황이 되기 마련입니다.(직접 겪어봤기에 밑줄까지 치면서 강조합니다.)

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

    그렇기에 실무(현장, 도메인)에 대한 이해가 완벽한 상태에서 데이터 분석을 적용시켜야 의미가 있는 분석이 됩니다. 예를 들어 이런 상황이라 할 수 있습니다. 요즘 데이터 분석에 대한 관심이 높은 상황에, 많은 대학교에서 빅데이터 분석학 커리큘럼을 구성하여, 대학원 코스를 구성하고 있습니다. 당연히 이런 대학원 학과에 관심이 가는 사람들도 많을 것입니다. 하지만 신생학과이기도 하고, 정보도 별로 없어 의혹은 생기고, 진학 전에 고민을 가지는 사람을 많이 봤습니다. 전 이런 분들께 이렇게 말해드리고 싶습니다.

  4. 만약, 금융권에서 빅데이터 분석을 하고 싶다.

    그럼 빅데이터 융합 대학원이 아닌, 경영, 경제, 산업공학과에서 금융을 연구하시는 교수님한테 가서, 빅데이터 분석을 하시길 바랍니다.

    도메인에 대한 이해가 부족한 상황에서의 분석은 말그대로 삽질하는 거랑 다를게 없습니다. 그냥 간단하게 막대그래프, 파이차트 등 그려주면서 평균값이 몇입니다. 라고 보고 하는 것이 더 효과가 좋을 수가 있습니다. 그러니 꼭 일하고 싶은 분야에서의 도메인을 충분히 익히시길 바랍니다.

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

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

    어차피 통계학에 대한 충분한 이해 없이는 머신러닝, 딥러닝을 아무리 공부해도 잘 이해가 되지는 않을 것입니다.


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

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

 

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

이 블로그의 인기 게시물

6.1.2 고수들이 자주 쓰는 R코드 소개 2편 [중복 데이터 제거 방법]

Ch2. 중복데이터 제거하기 및 데이터 프레임 정렬 Ch2. 중복데이터 제거하기 및 데이터 프레임 정렬 흔하지는 않지만, 중복으로 입력되는 데이터 셋을 마주치는 일이 생기기 마련입니다. 보통 중복데이터는 데이터 수집단계에서 많이 발생합니다. 하지만 이를 하나하나 엑셀로 처리하는 것은 한계가 있기때문에, R에서 처리하는 방법에 대해 다루어 보고자 합니다. 1차원 벡터, 리스트에서의 중복 제거 A = rep(1:10, each = 2) # 1 ~ 10까지 2번씩 반복 print(A) ## [1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 # 중복 제거 unique(A) ## [1] 1 2 3 4 5 6 7 8 9 10 데이터 프레임에서의 중복 제거 다음과 같은 데이터 프레임을 예시로 삼겠습니다. 변수 설명 OBS : 번호 NAME : 환자 이름 ID : 환자 고유번호 DATE : 검사 날짜 BTW : Body total water 먼저, 환자 이름이 있고, 그 환자의 고유 ID가 있습니다. 세상에 동명이인은 많기 때문에 항상 고유 ID를 기록해둡니다. # 데이터 불러오기 DUPLICATE = read.csv("C:/R/DUPLICATED.csv") DUPLICATE ## OBS NAME ID DATE BTW ## 1 1 A A10153 2018-11-30 1 ## 2 2 A A10153 2018-11-30 3 ## 3 3 B B15432 2018-11-30 4 ## 4 4 A A15853 2018-11-29 5 ## 5 5 C C54652 2018-11-28 5 ## 6 6 C C54652 2018-11-27 6 ## 7 7 D D14

4.4.1 R 문자열(TEXT) 데이터 처리하기 1

Ch4. 문자열 데이터 다루기 1 데이터 다운로드 링크: https://www.kaggle.com/PromptCloudHQ/imdb-data # 데이터 불러오기 DATA=read.csv("C:\\R/IMDB-Movie-Data.csv") Ch4. 문자열 데이터 다루기 1 이번에는 문자열 데이터를 처리하는 방법에 대해 다루겠습니다. 문자열을 다룰 때 기본적으로 숙지하고 있어야 하는 명령어는 다음과 같습니다. 문자열 대체 : gsub() 문자열 분리 : strsplit() 문자열 합치기 : paste() 문자열 추출 : substr() 텍스트마이닝 함수: Corpus() & tm_map(), & tdm() # 문자열 추출 substr(DATA$Actors[1],1,5) # 첫번째 obs의 Actors변수에서 1 ~ 5번째에 해당하는 문자열 추출 ## [1] "Chris" # 문자열 붙이기 paste(DATA$Actors[1],"_",'A') # 첫번째 obs의 Actors변수에서 _ A 붙이기, 기본적으로 띄어쓰기르 구분 ## [1] "Chris Pratt, Vin Diesel, Bradley Cooper, Zoe Saldana _ A" paste(DATA$Actors[1],"_",'A',sep="") # 띄어쓰기 없이 붙이기 ## [1] "Chris Pratt, Vin Diesel, Bradley Cooper, Zoe Saldana_A" paste(DATA$Actors[1],"_","Example",sep="|") # |로 붙이기 ## [1] "Chris Pratt, Vin Diesel, Bradley Cooper, Zoe Saldana|

3. Resampling 방법론(Leave one out , Cross Validation)

Ch4. Resampling 방법론 이전 챕터에서는 앙상블에 대해 다루었습니다. 앙상블을 요약하자면, Training Set을 Resampling할 때 마다, 가중치를 조정할 것인지 말 것인지를 다루는 내용이었습니다. 이번에는 구체적으로 Resampling 방법들에 대해 다루어 보고자 합니다. 1. Resampling의 목적과 접근 방식 모형의 변동성(Variability)을 계산하기 위해서 입니다. Training Set으로 모형을 만들고, Test Set으로 Error rate를 계산하며, 이를 반복합니다. 각 실행 별, Error Rate 값이 계산이 될 것이며, 해당 Error rate의 분포를 보고 모형의 성능을 평가할 수 있습니다. Model Selection : 모형의 성능을 Resampling 방법론을 통해 평가한다면, 모델링 과정에서 어떤 변수를 넣어야 하고, 혹은 모형의 유연성(Flexibility)을 어느정도로 조절하는 것이 적당한지 결정을 할 수 있기 때문에 매우 중요한 방법론 중 하나입니다. 모형의 유연성에 대해서는 다음 챕터에서 설명하도록 하겠습니다. 2. Leave-One-Out Cross Validation(LOOCV) LOOCV는 n개의 데이터에서 1개를 Test Set으로 정하고 나머지 n-1개의 데이터로 모델링을 하는 방법을 의미합니다. LOOCV 방법은 데이터 수 n이 크다면, n번의 모델링을 진행해야되기 때문에, 시간이 오래 걸립니다. 회귀, 로지스틱, 분류모형 등에 다양하게 적용할 수 있습니다. 3. K - Fold Cross - Validation 연산시간이 오래걸린 다는 것은 곧, 작업시간이 길어진다는 의미이며 이는 곧 야근을 해야된다는 소리와 다를게 없어집니다. 그래서 시간이 오래걸리는 LOOCV를 대채하기 위하여 K-Fold Cross - Validation이 존재합니다. 위 그림은 데이터 셋을 총 4개의 Set로 구성하였습니다. Cross -

4. 통계적 추정(점추정,구간추정)

Ch1. 점추정 추정량은 우리가 알고 싶어하는 모수를 표본들을 이용하여 단 하나의 점으로 추측하는 통계량입니다. 그 과정을 점추정(Point estimation)이라고 하며, 그렇게 얻어진 통계량을 점주청량(Point estimator)라고 합니다. 점추정량은 다양한 방식으로 구할 수 있습니다. 모평균을 추정하기 위한 표본평균 계산 각 끝의 일정 부분씩은 무시하고 나머지 표본들의 평균 계산(절삭 평균, Trimmed Mean) 등의 방법들이 있습니다. 하지만 가장 많이 쓰는 척도는 표본평균입니다. 그 이유는 대표적으로 수리적인 확장성과 표본평균의 분포를 비교적 쉽게 알 수 있다는 점을 들 수 있습니다. 점추정은 단순히 모평균을 추정하는 것만이 아닌, 회귀식을 추정하였을 때의 회귀계수도 점추정이라고 할 수 있습니다. (회귀분석은 후에 다룰 예정입니다.) 다만, 이런 점추정에도 몇 가지의 장점과 단점이 있습니다. 점추정의 장점 점추정량은 지극히 직관적이다. 통계를 모르는 누군가가 한국의 30대 여성의 평균 수입을 묻는다면 점추정량으로 즉각적인 답을 줄 수 있을 것입니다. 점추정량은 매우 직관적이며 합리적입니다. 점추정량은 우리가 원하는 수치를 대체할 구체적인 값을 제시해준다. 우리가 통계적인 모델링 혹은 함수를 작성하기 위해 30대 여성 수입의 평균치가 필요하나 모평균을 알 수 없을 때 점추정량으로 간단히 대체할 수 있습니다. 사실상 이는 대부분에 통계이론을 전개하는데 가장 중요한 역할을 합니다. 간단한 예를 말씀드리자면 모분산을 추정하기 위해서는 평균이 필요하기 때문에 표본평균을 이용합니다. 여기서 분산은 각 개별 값들이 평균에서 얼만큼 멀리 떨어져있는지에 대한 척도입니다. 그런데 우리는 '진짜 평균'을 알 수 없으니 아래 식과 같이 표본들의 평균으로 대체하는 것입니다. 여기서 평균 값을 표본평균으로 대체하였기에 표본분산은 n이 아닌 n-1으로 나누어 주게 됩니다. 이해를 돕기 위해 자유도에 대한 개념을 잠깐 다루도록 하

3.2.3 R 시각화[ggplot2] 2편 (히스토그램, 밀도글래프, 박스플롯, 산점도)

R 데이터 시각화 2편 R 데이터 시각화 2편 데이터 다운로드 링크: https://www.kaggle.com/liujiaqi/hr-comma-sepcsv # 시각화 이전에 처리 되어 있어야 하는 시각화 DATA = read.csv('C:/R/HR_comma_sep.csv') DATA$left = as.factor(DATA$left) DATA$Work_accident = as.factor(DATA$Work_accident) DATA$promotion_last_5years = as.factor(DATA$promotion_last_5years) 히스토그램(Histogram) [연속형 변수 하나를 집계 내는 그래프, 1차원] 히스토그램은 연속형변수를 일정 범위로 구간을 만들어, x축으로 설정하고 y축은 집계된 값(Counting)을 나타내는 그래프입니다. library(ggplot2) # 기본 ggplot(DATA,aes(x=satisfaction_level))+ geom_histogram() ## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. # 구간 수정 및 색 입히기 ggplot(DATA,aes(x=satisfaction_level))+ geom_histogram(binwidth = 0.01,col='red',fill='royalblue') # col은 테두리, fill은 채우기 밀도그래프(Density Plot)[연속형 변수 하나를 집계 내는 그래프, 1차원] 밀도그래프는 연속형변수를 일정 범위로 구간을 만들어, x축으로 설정하고 y축은 집계된 값(percentage)을 나타내는 그래프입니다. # 기본 ggplot(DATA,aes(x=satisfaction_level))+ geom_density() # 색 입히기 ggplot(DATA,a