R과 Interactive visualization의 문제

R과 관련없이 유명한 상용 Interactive Data Visualization 툴로는 Spotfire가 있습니다.
Spotfire는 그래프를 그리고 그래프의 영역을 계속 마우스로 선택해 나가면서 데이터를 탐색하게 해주는 툴입니다.
이 포스트에서 언급하는 것들은 주로 spotfire같은 것은 인터랙티브하게 반응하는 UI를 말합니다.
Processing이나 Paper.js같은 미디어아트와는 다소 다릅니다.

Interactive Data Visualization이 뭔데?

데이터 분석에서 Interactive Data Visualization 이 필요한 이유는 데이터탐색을 빠르고 직관적으로 하기 위한 것입니다.
엑셀같은 스프레드시트에 수치를 적어넣고 그래프를 다시 그리거나 R같은 곳에서 코드 적어가며 그래프를 완성해 나가는 방법은 탐색을 하는데 있어 시간이 꽤 걸리고 불편하다는 것입니다.

쉽게 할 수 있는 방법이 있다면 쉽게 해야 한다. 그것이 모티브입니다.

Interactive Data Visualization 애플리케이션이 작동하는 방식은 대충 특정 데이터를 로딩한 다음 그것에 대한 기본 그래프(플롯)나 여러 그래프를 나열해 놓고 한쪽에서 마우스로 눈에 띄는 영역이나 다른 영역을 선택하면 다른 플롯에서도 그 부분이 별도로 표시할 수 있고, 확대도 할 수 있고, 다른 플롯으로 다시 그려볼 수도 있게 해줍니다.

이런 과정을 매우 유연하고 편하고 반복적으로 하게 해주는 것을 말합니다.

때로는 애니메이션 기능을 이용해서 움직이게 만드는 것도 이 부류에 넣기도 하는데 애니메이션은 사실 직관을 찾기 위한 용도이지 진짜 탐색을 위한 용도는 아닌 경우가 많지요.  그부분은 다른 포스트에 따로 적기로 하겠습니다.

R과 Interactive Visualization을 말하기 전에 우선 결론적으로

R로 Interactive Visualization을 구현 하는 것이 매우 어렵다.

R을 위한 Interactive Visualization 패키지로는 ggobi, cranvas, iplot(Acinonyx)등이 가장 유명합니다. 그 외에도 다수가 있지만 그렇게 주류로 사용되지 않습니다. 일반적인 플로팅 패키지중에서 비교적 Interactive Visualization에 가까운 것으로는 역시 ggplot2가 있습니다. ggplot2에 대한 내용은 여기서 자세히 얘기하지 않겠습니다.

R로 Interactive Visualization이 잘 안되는 이유들

우선 아예 안되는 것이 아니라 잘 안되는 것이라고 말해둡니다.  오해의 여지를 줄이기 위해서

1. Cross platform을 위한 렌더링 엔진 문제

iplot과 ggobi같은 R 패키지는 GTK를 사용하고 cranvas는 Qt SDK를 interfacing해 놓은 qtbase 라는 R패키지에 강한 의존성을 가집니다. 물론 이 패키지들도 플랫폼에 따라 렌더링 엔진이 조금씩 다르긴 하지만 적어도 Mac OS X와 Linux를 위한 버전은 확실하게 의존성이 강합니다.  이런 패키지들이 렌더링 엔진을 이렇게 지저분하게 선택해야 하는 이유는 당연히 Cross platform 때문인데 대부분의 R사용자들은 Windows를 사용하지만 대부분의 R의 코어나 패키지 개발자들은 Windows를 사용하지 않고 Linux나 Mac을 사용합니다. 그리고 현존 하는 가장 유력한 범용 Cross Platform용 렌더링 엔진은 Qt, GTK, Java 정도입니다.
Java는 렌더링 엔진이 아니지만 어쨌든 크로스플랫폼으로 화면을 제어할 수 있어서 포함했습니다.
그 외에는 Browser기반의 Javascript + HTML5가 고려해 볼만한 대상이 되겠습니다.

대부분 Interactive Visualization 의 경우 여기서부터가 문제가 생깁니다.
Cranvas는 qtbase를 사용하지만 qtbase는 Windows를 지원하지 않으며 QtSdk를 설치하는 것도 매우 귀찮은 일이고
ggobi와 iplot2가 사용하는 GTK는  Qt보다 설치가하기 더 지저분합니다.
Java는 R과 인터페이싱하기가 너무 복잡하다는 문제점이 있습니다.
이 경우에는 rJava를 사용해서 R에서 Java를 제어할 것인지 Rj를 사용해서 Java에서 R을 제어할 것인지도 고민이 됩니다.
또 R의 패키지는 렌더링엔진을 포함해서 배포할 수 없는 구조이고 사용자가 알아서 다 설치해야 한다는 점입니다.

여기까지의 요점은 아래와 같습니다.

  1. Qt나 Qtk관련 패키지들은 설치 자체가 어렵고
  2. Java는 Interfacing 자체가 또 하나의 숙제고
  3. HTML5+Javascript는 매우 복잡하고 지저분하다.
2. 기존 plotting 평션의 재활용 문제

R에는 많은 plotting관련 패키지들이 있습니다. 기본으로 제공하는 것도 물론 매우 훌륭한다. 대부분의 현존하는 모든 형태의 2차원 플롯은 다 지원하고 미려하고 섬세한 표현이 가능하긴합니다.
하지만 사용자마다 쓰는 플롯이 다르고 원하는 바도 많이 다릅니다.

사람의 욕심은 끝이 없어서 이 미려한 R의 플로팅을 인터렉티브 플로팅에서도 보고 싶어하지만
안타깝게도 렌더링할때 때로는 R의 플로팅용 device를 다시 개발해야하는 문제가 있으며 인터랙티브요소 때문에 plotting에 대한 펑션을 다시 제작해야 하는 경우가 대부분입니다.

이런 방식은 기본 플로팅 평션을 그대로 쓸 수가 없다.

결국 포기하고 포팅을 하거나 새로 만들게 되는데 R의 패키지 제작자들이 많아 1 ~ 2명 정도가 대부분인 것으로 볼 때 많은 종류의 플롯을 지원하기가 당연히 어려울 것이다. 완성도가 높을 수가 없습니다.
대충 어렵게 설치해서 Cranvas, iplot등을 어렵게 쓴다고 해도 이 패키지들의 결과물의 상태가 문제점이 많습니다.

그리 빠르지 않다.
그리 예쁘지 않다.
그리 편하지 않다.

실제로는 그리 쓸만하지 않다는 것입니다.

3. HTML5+Javascript을 활용하는 것은 어색하다.

그러면 크로스플랫폼 문제라도 해결하기 위해서 Application based에서 Web based로 전환하면 어떨까? Web based라면 플랫폼문제가 해결되고 기존의 플로팅 펑션을 그대로 활용하는 것은 일단 포기하는 것으로 생각하고 성능과 편리함을 미세하게 조절하고 경쾌하게 움직이는 것도 역시 다소 희생한다고 하면 시도해 볼 수도 있겠습니다.

R이 범용 랭귀지가 아니기 때문에 이 또한 우아하게 해결이 되지 않지만 그래도 할 수는 있습니다. R로 web service를 할 수 있는 잘 알려진 방법은 다음의 두가지입니다.

  • Apache를 설치하고 rApache모듈을 붙여서 R로 CGI 코딩을 한다.
  • Rook 패키지를 설치해서 CGI코딩을 하고 로칼에서 브라우저로 R에 접속한다.

이 외에도 많지만 요즘 대세는 위 두가지입니다.
위의 두가지중 하나를 선택한 후에는 base로 사용할 Javascript framework을 선택해야 하는데
Processing.js, paper.js, hichart, ExtJs등을 선택할 수 있습니다.

그런데 이쯤되면

이걸 왜 R로 해야하지?

라는 의문이 생깁니다.
애초에 R을 이용한 Interactive Visualization을 하고 싶은 이유는 앞에서 말하지는 않았지만
아래와 같은 이유 때문이 많습니다.

  • R의 강력한 플로팅 기능을 그대로 활용
  • R의 다양한 알고리즘, 펑션이나 관련 패키지를 그대로 활용
  • 최대한 R base에서 많은 부분을 할 수 있도록해서 사용성을 높임

어떤 방법을 선택해도 위 문제중 2가지 이상을 쉽게 해결해 주지 못합니다.
첫번째는 기존 플로팅 펑션을 포팅하는 방법외에는 길이 없습니다.
두번째는 R을 베이스로 작동하게 하면 해결되긴 합니다.
세번째가 문제인데
이것을 해결하기 위해서는 너무 많은 삽질이 필요합니다.
지금까지 제 결론은

R의 그래픽 디바이스를 Web 기반으로 작동하게 하나 만들고 그 디바이스를 이용한 플롯펑션을 만들고, 그리고 인터페이스쪽 부분을 Javascript로 떡칠하는 것입니다.

물론 여기까지의 이런 고민들은 Windows라는 OS를 포기하고 나 혼자만 쓰기로 작정하고 Cocoa 기반으로 만들면 됩니다.  하지만 그러기에는 Windows사용자가 너무 많습니다.

더구나 Big Data를 위해서 Hadoop, Hive, RHive 연동까지도 더불어 생각하면 선택의 폭이 더욱더 좁아집니다.

 

R에서 Locale 바꾸기

R에서 로케일(Locale)을 바꾸는 코드입니다.
R에서 로케일을 지원하는 펑션(function)들이 아직은 많지 않습니다만 datetime을 다루는 것들 중 일부는 따르는 것이 있습니다. – 다른 언어들도 대부분 그렇습니다 –
아래 예제 코드는 OS별로 Locale코드가 다른 문제로 인해 결과물을 다르게 나올 수 있음을 유의하셔야 합니다.
포맷을 바꾸고 싶으면 Locale에 의존하기 보다는 강제로 세팅을 하는 것이 아직은 편할 수 있습니다.
물론 en_US이기 때문에 이렇게 세팅하면 메세지가 영어로 나옵니다.
한글로 바꾸려면 “ko_KR.UTF-8″로 해야 합니다.


sessionInfo()
Sys.getlocale()
Sys.setlocale("LC_TIME", "en_US.UTF-8")
Sys.setlocale("LC_CTYPE", "en_US.UTF-8")
Sys.setlocale("LC_COLLATE", "en_US.UTF-8")
Sys.setlocale("LC_MONETARY", "en_US.UTF-8")
Sys.setlocale("LC_MESSAGES", "en_US.UTF-8")

데이터 사이언티스트 (Data scientist)

데이터 사이언티스트(Data scientist, 이하 데이터 사이언티스트)에 대한 정의와 신규 직종으로써의 논의 거리고 많이 언급되고 있는 것 같아 저도 제 생각을 정리해 봅니다.

데이터 사이언티스트는 데이터와 관련된 것들을 모두 연동 또는 연결해서 결과물을 만들어 낼 수 있는 사람입니다.
이런 작업이 가능 하려면 관련된 다양한 지식과 경험, 기교가 필요합니다. 여기서는 다양성이 더 중요한데 학습 영역도 넓어야 하고 깊이도 나름 갖추고 있지 않으면 안됩니다. 학습 뿐만 아니라 실제 경험이 있어야 하는 것이 더 중요합니다. 학교에서 배우기에는 분량도 많고 영역도 상당히 넓습니다.

데이터 사이언티스트의 스펙에는 정보검색, 자료구조, 기계학습, 데이터마이닝, 알고리즘, 비주얼라이제이션, 인간공학 그리고 비지니스적인 설득을 위한 프리젠테이션까지도 포함됩니다.

이런 데이터 사이언티스트들의 정의에 나오는 스펙을 만족시킬 수 있는 사람은 현재로써는 IR과 관련된 일을 집중적으로 해서 업무 영역이 넓어진 사람이 대표적입니다.
이 사람들은 훈련이 되는 것이 아니라 스스로 훈련을 해야만 스펙을 갖출 수 있기 때문에 학교를 갓 나온 사람들에게서는 그런 것을 찾기가 어려울 것이며 그래서 실리콘 밸리에서 데이터 사이언티스트를 채용하려고 할 때 관련이 있는 회사에서 일한 경험이 많은 사람을 우선해서 채용하려고 하는 것입니다.

이 사람들은 대형 인터넷 업체에서 일을 하면서 초창기의 정보검색을 서비스로 제공하는 과정을 거쳤으며 전혀 쓸모 없을 법한 기계학습과 데이터마이닝, 인공지능이 정보검색과 서비스에 어떻게 적용되는지를 봐왔고, UI와 디자인의 표현이 인간의 반응에 어떤 영향을 주고 어떻게 다음 행동을 유도할 수 있는지를 이해하는 과정을 거치게 됩니다.
그리고 그런 데이터의 가공과 흐름과 사용자의 반응들로 인해 만들어진 로그와 같은 2차데이터들에서 부가적으로 얻을 수 있는 것이 무엇인지 경험 또는 아이디어를 통해서 얻어내서 3차데이터로 만들어내는 과정도 당연히 거쳤을 것이며, 방대하게 늘어나는 데이터를 통해 데이터와 관련된 시스템의 구조와 데이터를 추출, 가공 그리고 제공하는 방법을 이해하고 고민하며, 거대한 데이터와 시스템을 구축하는데 자원을 절약하는 방법과 자원을 과소비하여 시간을 단축을 엑셀레이션하는 역발상의 다른 패러다임을 생각해내고 이해하는 과정도 거쳤을 것입니다.
그리고 최종적으로 이런 것들이 어떤 싸이클을 돌며 하나의 생태계와 같이 끊기지 않는 순환고리를 만들며, 스스로도 점점 확장되어 갈 수 있게 하나의 작은 사회를 설계하며 조절하고 순환이 잘 되도록 유도하는 방법까지도 이해하게 됩니다.

이것이 현재 유행하는 빅데이터와 관련된 일을 하는데 필요하다고 말하는 데이터 사이언티스트의 기본 스펙이라고 할 수 있습니다.

현재의 사람들이 중에 이 스펙들을 갖춘 사람이 드문 이유는 이와 관련된 일이 지금까지 진입장벽이 매우 높은 일부 인터넷 서비스에서만 폐쇄적으로 그리고 집중적으로 다루어져 왔으며 이런 스펙들이 크게 각광받는 분야도 아니었으므로, 취업시장에서 흔히 진리라고 여겨지는 적자생존의 논리에 의해서 이와 같은 커리어 패쓰로 진입하려는 사람도 많지 않았기 때문입니다.  진입을 꺼려하는 또하나의 이유는 관련된 일들은 실패할 확률이 매우 많아 성과를 보여주기 어렵고, 지루하고 반복되는 일이 되기 쉬우며, 업무량이 많음에도 불구하고 옆에서 보기에는 놀고 있는 것처럼 보이기 때문이며 제대로 평가를 하기도 어려운 일을 하기 때문입니다.

하지만 이런것에 획기적인 전환을 이끄는데 중심이 되는 회사가 구글, 아마존, 페이스북, 야후, 넷플릭스등의 온라인 마켓, IR 그리고 소셜 콘텐트 서비스 회사들입니다.

그들은 이런것들이 충분히 돈벌이가 되며 가치를 만들어 낼 수 있음을 이미 오랫동안 사업을 하면서 알아왔고 최근에는 그에 대한 내용을 상당히 공개하게 되었고 성공의 핵심에 데이터를 다루는 일이 있다는 것을 알게 되었으며, 많은 사람들이 그에 대한 것을 호기심 또는 새로운 분야에 대한 탐구심 또는 각광받는 직군으로의 진입을 생각하며 관심을 가지게 됩니다.

그리고 이와 같은 회사들은 손으로 만져지는 하드웨어는 판매하는 것들이 아무것도 없으면서 그렇다고 소프트웨어를 판매하는 것도 아니며 그와는 다른 무형의 가치인 데이터의 가공을 팔아서 챙긴 이익으로 세계 최상레벨의 기업으로써의 위상을 보여주기까지 합니다.

결국 데이터 사이언티스트는 이들 기업이 하는 일의 공통적인 부분을 하나의 직군에 대한 커리어라고 보고 ,이것을 최대한 커버할 수 있는 엔지니어 그룹 중에 현재로써는 그 수가 가장 적은 사람들입니다.

실리콘 밸리에서 이 사람들이 최근 이 사람들 많이 필요하게 된 이유는, 이 사람들이 있으면 데이터와 관련된 사업을 하려는 벤쳐들은 스타트업을 바로 시작할 수 있으며, 시작하는데는 많은 수의 데이터 사이언티스트가 필요하지도 않습니다. 분산처리, 네트워크, 코어개발등의 엔지니어도 필요하고 공급도 부족하지만 이런 것들은 시작하는데 당장 필요하지 않으며 분산처리를 제외하고는 데이터와 직접적인 관련이 없으며 어느 정도 제품의 구매를 통해서 해결할 수도 있으며 아직까지는 취업시장에서 인재를 쉽게 구할 수 있습니다.
하지만 데이터 사이언티스트는 쉽게 양성되지 않는 프리랜서의 시초인 고대의 창기병들처럼 빨리 공급이 채워지지 않으며 훈련기간이 더디게도 길고 현재 생존해 있는 수가 생각보다 매우 적습니다.

스타트업 뿐만 아니라 대형 기업에서도 수가 많은 편이 아니며 이탈했을 경우 채워 넣기가 쉽지 않고, 그렇다고 해서 내부에서 양성하기에도 쉽지 않습니다. 훈련이 쉽지 않고 시간이 상당히 오래 걸리기 때문입니다.

결국 공급이 매우 부족하며 당장은 해결할 수 없는 것입니다.
이 공급은 계속해서 부족하게 될 것이 자명하며 그 이유로는 데이터와 관련된 일에 사람들이 관심을 돌리고 있고 쌓이는 데이터는 점점 많아지고 다양화되기 때문에 그 공급부족 현상이 더 가속화될 수 밖에 없는 것입니다.

현재의 정의로 보면 데이터 사이언티스트는 데이터와 관련된 일에 대해서는 아키텍트(Architect)이며 실무자라고 할 수 있으며 데이터와 관련된 모든 것을 설계하고 구성할 수 있는 사람입니다.

그리고 이 사람들이 하는 일과 관련된 것들 중 아주 큰 데이터를 가진 부분집합을 사람들은 한 단어로 빅데이터(Big Data)라고 합니다.

 

2SD rule (2표준편차 법칙)

2SD Rule (2표준편차 법칙, To understand variability; 가변성을 이해하기?)

Super crunchers(슈퍼크런처, Ian Aires저) 라는 책에 있는 내용 중 2SD라는 용어가 나와서 궁금하던 차에 내용 일부를 정리해 둡니다. 

슈퍼크런처는 기술서적이라기 보다는 교양서적입니다. “직관보다는 데이터분석에 입각한 의사결정에 중점을 두는 것이 옳다”라는 내용인데요.  전문가의 직관에 의존한 의사결정도 좋지만 데이터에 입각한 근거있는 결정도 필요하다는 내용입니다.  데이터마이닝에 관심이 있는 사람은 한 번 읽어봐도 좋을 듯 싶습니다. 어려운 내용은 아닙니다만 생각을 좀 해야 하는 부분은 있습니다.

이 책에 통계에 대한 내용이 나옵니다.

2표준편차법칙(2SD rule)은 책의 후반부에 나오는데 잘 보지 못하던 용어라서 여기저기서 내용을 찾아서 정리해 두려는 것입니다.

정보를 찾다 보니 이미 잘 알려진 내용을 다른 방식으로 표현한 것이고 일반적으로 생활에서 어떻게 쉽게 적용이 가능한지 보여주는 일종의 단편적인 예와 같은 것입니다.

2SD는 어떤 정규분포변수가 그 평균치의 -2 표준편차와 -2표준편차내에 위치할 확률이 95%가 된다는 말입니다. 여기서 ±2SD는 2의 의미는 1.96을 반올림해서 나온 근사치값으로 보입니다. 그래서 ±3SD rule (2.54를 반올림해서 나온것이라고 생각하는데 반올림하기에는 반올림한 차이가 좀  큰 것 같아서 조금 그렇네요)일 경우에는 99% 라고 계산하는 계산식도 자료를 찾던 중 쉽게 찾아 볼 수 있었습니다.

제가 가진 통계학 책들에는 2SD, 3SD라는 용어를 사용하지 않았기 때문에 무슨 용어인가 궁금 했습니다만 생각보다 단순한 것이었습니다. 용어는 저자가 직접 만들어낸 것 같기도 한데 정확하게 저 용어를 사용해도 되는지는 모르겠습니다. 저자가 유명한 사람이고 하다보니 이런 용어 새로 만든다고 해서 뭐라고 할 사람은 별로 없을 것 같습니다. 영문 자료를 찾다 보니 책의 영향인지는 모르겠지만 같은 용어를 쓰는  분들도 더러 있었고 아닌 경우에도 대충 감을 잡을 만한 비슷한 내용을 생각보다 많이 볼 수는 있었습니다. 아래는 찾은 내용들과 책을 정리한 내용을 잊어 버릴까봐 기록해 둔 것입니다.

2SD rule: 정규분포변수가 그 평균치의 +-2표준편차 내에 존재할 확률은 95%이다.

먼저 슈퍼크런처 책에 나와 있는 내용들중 예제를 Q/A형식으로 그대로 조금 거쳐서 적은 것입니다.

책의 질답 내용

Q. 사람의 IQ는 평균이 100이고 표준편차가 15인 정규분포를 따른다. 그러면 사람들의 IQ는 대체 얼마라는 말인가?

A. 2SD 법칙에 의하면 95%의 사람들의 IQ는 70(100에서 2표준편차를 뺀값)에서 130(100에서 2표준편차를 더한 값, 즉 15×2=30) 사이에 존재한다. 2SD 법칙을 사용하면 표준편차값을 분산도에 대한직관적인 표현으로 쉽게 변환할 수 있다. 대부분의 사람들은 IQ가 70 ~ 130사이이다. IQ의 분산도가 더 적다면, 즉 표준편차가 5라면 95%의 사람들을 포함하는 IQ의 범위는 훨씬 작아진다.  다시 말해 95%의 사람들이 IQ가 90과 110사이라고 말할 수 있다.

Q. 유권자 1243명을 대상으로한 퀴니피액대학 여론조사에서, 상원의원 후보자 가운데 캘빈이 52%로 48%인 홉스보다 지지율이 높게 나왔다. 이번 조사의 오차 한계는 +-2% 포인트이다. 캘빈이 당선된다는 말인가? 아니라는 말인가?

A. 오차한계는 2SD에 해당한다. 오차한계가 2%포인트라고 나왔다면 이것은 1표준편차(1SD)가 1% 포인트라는 뜻이다. 우선 캘빈의 표준 지지율 52%에서 오차한계(즉 2SD)를 더하고 빼면 특정한 범위가 나온다. 즉 52 ±2% 이다. 2SD rule에 의하여 캘빈을 지지하는 유권자가 50% ~ 54% 사이일 확률이 95%라는 말이다. 캘빈의 지지율이 50% ~ 54%일 확률이 95%이므로 그의 실제 지지율이 종형곡선(정규분포, Normal distribution의 그래프)의 양쪽 가장자리에 속할 확률, 즉 54%이상 50%이하일 확률은 5%가 된다. 그리고 종형곡선의 양쪽 가장자리 부분은 면적이 동일하므로(정규분포 곡선은 아시다시피 좌우 대칭입니다), 캘빈의 지지율이 50%이하가 될 확률은 2.5%이다. 이는 캘빈이 앞서고 있을 확률이 97.5%라는 뜻이다.

Q. 레이번이 셜리를 51% 대 49%, 오차한계 2%로 앞서고 있는 경우, 신문은 이 경합을 두고 ‘통계적으로 볼 때 막상막하’라고 보도할 것이다. (맞는 말인가?)

A. (하지만) 이건 헛소리다. 레이번의 여론조사 결과는 50%에서 1표준편차만큼 높다(오차한계는 2표준편차이므로 1표준편차는 1%). 따라서 레이번이 앞서고 있을 확률이 84%라는 것을 알게 된다. 별다른 변수가 없다면 레이번의 당선이 유력한 것이다. 누구를 지지할지 결정 못한 사람들과 제3의 후보들이 있기 때문에, 많은 여론조사에서 경합을 벌이는 두 후보의 지지율은 합해도 100%가 되지 않는다. 그러나 지지율 우세 확률은 우리에게 예상 당선자를 말해준다.

※ 그럼 이제 책에 나와 있는 몇가지 정의를 다시 적어 둡니다.

통계적의 유의하다. 통계학자들이 어떠한 결과를 두고 ‘통계적으로 유의하다’ 라고 말하는 경우, 어떤 예측값이 다른 값과 2표준편차 이상 차이가 난다는 것을 뜻한다.

2SD의 또다른 측면 임의변수가 예상 평균값에서 2표준편차 이상 떨어져 있을 확률은 5%가 채 되지 않는다. (2SD rule에 의하면 95%가 평균으로부터의 2SD내에 있으므로 나머지는 5%가 됩니다)

오차범위 오차범위는 신뢰구간이 95%라면 그 95% 바깥쪽 넓이를 말하는 것이 아닙니다. 95%신뢰구간이라고 하면 이 신뢰 구간 안에 포함될 (표본이 아닌 실제값이) 확률이 95%인 것입니다.

다시 말해서 신뢰구간은 ‘확률±오차범위’ 에 포함될 확률이 95% 임을 말합니다. 물론 2SD를 따른다고 하는 경우에 그렇습니다. 아래는 무한모집단에서 표본허용오차 공식 ±1.96sqrt(p(1-p)/n) 또는 Z crit * stdev / sqrt(n) 표본수가 매우 큰 경우 즉, 무한모집단이면 보통 모집단은 정규분포(Normal Distribution, Gaussian Distribution)를 따르는 것으로 가정합니다.  자연계에서 아주 자연스러운 데이터의 확률 분포는 정규분포를 보편적으로 따릅니다. 그리고 샘플링의 경우 중심극한원리 (Central Limit Theorem)에 의해서 표본(Sample)의 양이 충분하다면 정규분포를 따르게 됩니다 여기서 표본 오차를 구하려면 표본집단에서의 표준편차나 모집단의 편차가 필요합니다.

모집단의 표준편차가 없는 경우 표본집단의 표준편차를 이용하게 되는데 보통의 경우 모집단의  표준편차(또는 분산)을 구할 수(알 수) 없는 경우가 대부분입니다. 아래는 여기저기서 긁어 모은 오차범위를 구하는 것에 대한 예제풀이입니다.

(워낙 마구잡이로 긁어오다 보니 출처가 엉망이 되었고 내용을 제가 많이 편집해서 출처는 따로 기재하지 못했습니다. 혹시 문제가 된다면 알려주시면 바로 지우도록 하겠습니다.)

예제

n(표본수) = 1000명 일 경우

보통 여론조사에서 1000명 많이 한다고 합니다. 그러고보니 뉴스에서 1000을 대상으로 했다고 하는 것을 많이 들은 것도 같지요. 하지만 1000명으로 고정되어 있는 것은 아닙니다.

(±)1.96 * sqrt(0.25/1000) = 0.0309. 여기에 100을 곱하면 3.09 1000명일 경우는 표본오차가 대략 (±)3.1% n(표본수) = 600이라면 같은 방식으로 계산해서 (±)4.0%

0.50.5를 하는 이유 여기서 0.50.5는 최대허용오차(중요)로 0.50.5=0.25로 보다 큰 숫자를 가지는 경우는 없습니다. 생각해 보니 진짜 그러네요. 0.1 * 0.9, 0.2 * .08, 0.3 * 0.7, … 모두 0.25보다는 작습니다)

예를 들어 0.4 * 0.6 = 0.24로 0.25보다 작으므로 0.50.5를 두고 최대허용오차라고 합니다. 언론에서 말하는 (±)3.0, (±)4.0 등도 모두 최대허용오차입니다.

1.96을 곱하는 이유 정규분포의 특성에 따르면, 신뢰구간 95%일 경우는 1.96을 곱하고, 99%일 경우는 2.54를 곱합니다. (위에서 말씀드렸지만 2SD(1.96)는 95%이고 3SD(2.54)는 99%입니다) 즉, 확률을 높일 경우 정규분포에서 보는 신뢰구간이라고 정의하는 영역이 넓어지게 됩니다.

위의 예(n = 1000)에서 1.96(95% 신뢰구간) 대신에 2.54(99% 신뢰구간)를 곱하면, 99%의 신뢰구간에서 (+-)4.0%가 됩니다.

추가 설명

보통 지지율이나 여론 조사 등에서 이 오차범위는 1.96*0.25/sqrt(n) 으로 구하는데, 당연히 n이 클수록 이 값이 작게 나오며 표본을 많이 뽑을 수록 오차범위가 줄어들어 좋습니다. 예를 들어보면, A후보가 49% B후보가 46% 지지율을 얻고 오차범위가 ±1.0%라고하면 A후보는 48%~50%의 지지율을 얻고, B후보가 45%~47%의 지지율을 얻을 확률이 95%라는 것이죠.

위의 책에서의 예제와 같은 것입니다. 확률이 두 번 겹쳐서 나오니까 헷갈리지만 그리 어렵지 않습니다. 어쨌든 여기서는 95%신뢰구간 하에서는 A후보가 B후보를 이기고 당선될 것이라고 생각할 수 있죠. A후보의 지지율 중 낮은 영역에 있는 48%가 B후보의 지지율 중 높은 영역에 있는 47%보다 크기 때문에 95%확률로 A후보가 당선된다는 얘기입니다. 물론 5%의 오차가 있기 때문에 아닐 수도 있겠지만 가능성이 적겠지요.

100%신뢰구간은 가능한가?

100% 신뢰구간은 -무한대에서 +무한대가 되어야 해서 현실에서는 성립이 안됩니다.

사용할 수가 없고 구간을 정할 수도 없는 것이지요. 보편적으로 신뢰구간을 정해야 하는 경우 대부분 95%신뢰구간을 사용하고 특별히 더 정확하게 알고 싶은 경우나 투표의 경합지역 같이 민감한 경우는 좀더 신뢰성을 높이기 위해서  99%를 사용하기도 한다고 합니다.

실제로 정규분포를 R이나 Prism, Excel등의 툴들을 이용해서 그래프를 그려 놓고 보시면 이해가 빠르니 시간날 때 한 번 그려보세요

포맷이 깨져서 다시 수정하다보니 틀린 내용이 있어서 일부 교정을 했습니다. 역시 전 멍청한가봐요.

웹페이지 골든 트라이앵글 – Golden triangle on web page

Golden triangle in web page (골든 트라이 앵글) 지난번 포스트에 ATF(Above the fold line; 이하 줄임) 얘기를 할 때 언급하지 못한 것 같아서 추가해서 포스트를 올려 봅니다. ATF를 얘기할 때는 보통 eye-tracking(기계장치로 사람의 눈동자를 추적해서 동선을 파악하는 테스트)의 결과에서 나온 Golden-triangle에 대해서 언급하는 경우도 많습니다. Golden-triangle은, 검색페이지나 웹페이지에서 사용자에게 노출되면서 시선이 집중되는 영역을 적외선감지기에서 보여지는 온도처럼 표기한 그림을 그리고, 거기서 시선이 가장 많이 집중(focusing)되는 역삼각형모양의 가장 중요한 영역을 말합니다. wpid-google-eye-scan-2010-10-20-03-442.jpg 위와 같은 그림입니다 (인터넷에서 줏어왔습니다. 저희 회사것은 공개불가 ‘o’) 위 그림은 유명한 구글의 검색결과에 대한 eye-tracking한 결과입니다. 대부분의 검색결과 사이트들은 위와 위사한 역삼각형 모양의 hot-spot(hot-focusing) 영역을 가지게 됩니다. (적어도 좌철방식을 쓰는 나라에서는 그렇습니다. 우철방식의 아랍권은 어찌되는지 모르겠네요. 궁금할 따름입니다) eye-tracking (eye-scan)은 특별한 장치를 설치하고 선정된 사용자에게 임무을 부여하거나 또는 무작정 서핑(검색)을 시켜서 눈동자의 동선과 머무 시간, 마우스의 위치와 클릭등을 추적하는 user test를 말합니다. 장치가 비교적 고가이고 사용자를 선정해서 테스트 하는 것도 만만치 않기 때문에 환경이 마련되어 있지 않은 곳에서는 쉽게 하기는 힘든 테스트입니다. 또 운영하는데 경험과 지식도 필요합니다. 아무튼 테스트 결과는 저런식으로 많이 display해서 보여주게 되는데 색깔이 빨갛게 집중된 곳일 수록 사용자의 시선이 많이 머문곳입니다. 즉 더 중요하게 관리되어야 하는 영역이라는 뜻도 됩니다. 보편적으로는 위 그림과 같은 성향을 띕니다만 성향일 뿐이고 실제로 eye-tracking을 해보면 모든 사이트의 결과가 천편일률적으로 저렇게 나오지는 않습니다. 즉, 다른 페이지의 결과를 가지고 대충 유추해서 참고하는 것은 괜찮지만 정확하지 않을 수 있으므로 환경이 마련될 수 있다면 자기가 운영하는 웹페이지의 시선이 집중되는 곳을 확인하기 위해서는 eye-tracking을 직접 해봐야 합니다. 굉장히 재미있는 결과를 볼 수도 있습니다. 차이점이 나오는 대표적인 요인이 UI나 layout의 배열같은 visual의 차이에도 많이 있고, 브랜드에 대한 성향을 미리 파악하고 있다거나 습관 또는 뭔가 부수적인 영향에 의한 것들에도 사용자가 당연히 interaction(반응)을 합기 때문입니다. 구글이 저렇기 때문에 내 웹사이트도 저럴 것이다라고 보편일반화 하는 분들이 있는데 저는 오류라고 주장하고 싶습니다. 가장 일반적으로 쉡게 범하는 오류는 내 사이트를 golden triangle에 잘 부합시키도록 design과 UI를 크게 바꾸었는데 결과가 다소 다르게 나온다고 말하는 경우입니다. 당연히 다릅니다. 그래서 새로 바뀌는 UI에 대해서도 미리 eye tracking이 되어야 합니다. 또는 bucket test등을 통해서 미리 살펴보아야 합니다. 그래서 UI같은 것도 한꺼번에 바꾸는 것이 아니라 서서히 바꾸는 것이고 큰 틀을 벗어나는 모험을 할 것인지 안할 것인지를 결정하는 것도 중요합니다. User의 반응은 우리가 생각하는 것보다 매우 상대적이고 유연하고 학습이 잘되어 있고 나름대로 타당성을 가지고 있게 마련입니다. 가장 재미있는 오류라고 생각하는 것이 golden triangle에 붉은색 영역에 비싼 광고를 배치하면 잘 되겠네 라고 생각하는 것입니다. 반드시 그렇지 않을 수도 있습니다.