R에서 Locale 바꾸기

April 23rd, 2012 No comments

R에서 Locale을 바꾸는 코드입니다.
R에서 Locale을 지원하는 function들이 아직은 많지 않습니다만
datetime을 다루는 것들 중 일부는 따르는 것이 있습니다.
아래 예제 코드는 OS별로 Locale코드가 다른 문제로 인해 결과물을 다르게 나올 수 있음을 유의하셔야 합니다.
포맷을 바꾸고 싶으면 Locale에 의존하기 보다는 강제로 세팅을 하는 것이 아직은 편할 수 있습니다.

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")
 
(today <- Sys.Date())
format(today, "%d %b %Y")
 
Sys.getlocale()
Sys.setlocale("LC_TIME", "ko_KR.UTF-8")
Sys.setlocale("LC_CTYPE", "ko_KR.UTF-8")
Sys.setlocale("LC_COLLATE", "ko_KR.UTF-8")
Sys.setlocale("LC_MONETARY", "ko_KR.UTF-8")
Sys.setlocale("LC_MESSAGES", "ko_KR.UTF-8")
 
(today <- Sys.Date())
format(today, "%d %b %Y")
Categories: Uncategorized Tags:

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

February 8th, 2012 No comments

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

Categories: Uncategorized Tags:

심심풀이

November 16th, 2011 No comments

통속 소설 몇권을 형태소 분석기로 돌려서 명사만 추출해서 단어를 쭉 훑어 보았습니다.

왜냐고 물으신다면. 그냥  하고 싶어서…
가끔은 멍때리는 짓을 하고 싶은 욕구가 무럭무럭 일어납니다.

많은 양의 단어들이 잘못된 개행과 맞춤법오류, 형태소 분석기 후처리 사전의 부족함으로 인해 공중분해되어 날아가 버렸지만 보편적으로 강력한 것들은 그럼에도 불구하고 의도한대로 대충 추출되었습니다.
앞서 말씀드렷듯이 명사만 보려고 했기 때문에
동사와 조사 기타 잡사등은 다 날려버렸고 대명사도 저멀리 은하계 저편으로 강제로 날려 버렸습니다.

사실 원래 해보려고 했던 것은 분야별로 잘 나오는 명사들이 있어서 대략 명사들의 출현 빈도나 패턴등으로 어떤 부류의 소설인지 자동 분류가 가능하지 않을까 하는 호기심 때문이었습니다.  (아주 쓸데 없는 짓이지요)
물론 소설은 자동분류가 필요 없을 것입니다. 이미 출판이 되거나 연재가 시작 될 때 그 부류가 결정이 되기 때문에.
여튼 그리고 겸사겸사 소설들에서 사용하는 명사들은 어떤 것이 많이 쓰이는지 장르별로 차이가 얼마나 많은지 그런 것을 확인해 보고 싶어서 였습니다.

여튼 몇권을 형태소 분석기를 돌려 추출한 명사만 훑어 본 것인데 거의 모든 소설에서 공통적으로 1,2,3등으로 나오는 단어는 아래와 같습니다.

1. 주인공 이름
2. 사람
3. 생각
4. …

뭐 대충 이런 순서입니다. “인간”과 “사람”을 동의어로 취급해서 count를 하나로 합치면 가장 많은 것이 “사람”이었구요.
저것들이 롱테일에서 헤드부분을 차지하고
그 뒤로 미들부분에 나오는 것들이 보통 그 소설의 특성을 반영할 수 있는 명사들이었습니다.
판타지 소설이면 마법과 갑옷 뭐 그런것에 관련된 어휘들, 무협소설이면 무공과 관련된 것들, …
그리고 그 뒤로는 주변인물들 이름들을 비롯한 다소 애매하지만 소설의 내용을 유추하거나 반영할 만한 단어들이 나왔습니다.
테일쪽에서는 사자성어들과 외래어표기, 어려운 한자어 등이 많이 보였습니다.

보통 소설들이 3인칭 시점이 많으므로 주인공 이름이  가장 많이 나오는 것이 당연할 것입니다.
다시 말하면 그다지 중요하지 않다는 얘기구요.
그냥 소설을 읽지 않고도 주인공이 누구고 주변 인물이 대충 누구인지 알아내는 정도에나 쓸까요.
글자수와 자음과 모음의 사용 빈도나 패턴을 뽑아서 분류기로 만들면 주인공이 서양인지 동양인지 판타지인물인지 정도도 알 수 있을 것 같습니다만. (그다지 쓸모 없는 일 +1)
여튼 포스팅을 하게 된 이유는 무작정 많이 출현한 이유가 궁금해지는 저 “사람”과 “생각”이라는 단어입니다.
제가 보통 소설을 읽을 때 크게 주목하지 않는 단어들이기 때문이고 그렇게 많이 출현 할 것이라고 전혀 생각하지 않았기 때문이기도 합니다.
“생각”의 경우는 동사의 일부분으로 사용된 것도 상당히 많기 때문에 명사만 제대로 카운트 했다고 할 수는 없습니다.
불쌍한 동사파생접미사들은 명사만 남기고 모두 대명사들과 함께 은하계 저편으로 이미 날아갔습니다.
(붙여서 동사로 취급해서 날려 버렸어야 하는데 뭐 그렇게 정성들이고 싶지는 않아서…)

여튼 제가 추측한 원인은
소설의 특성상 이야기를 이끌어 나가면서 주인공과 주변인물들을 비롯한 사람들이 하는 생각에 대해 심리묘사나 설명으로 이야기를 매끄럽게 이어가기 위해서 많이 사용할 수 밖에 없는 것이 아닌가라고 생각했습니다. (지금 제가  쓴 문장에도 “사람”과 “생각”이란 단어가 들어 있습니다만)

그런데 심리묘사를 위해서 많이 쓰기도 했지만 사람과 생각이라는 단어가 상당히 비슷하긴 하지만 여러가지 용도로 많이 쓰이는 것을 확인했습니다. 다목적?
일일히 다 열거하기 귀찮아서 쓰지는 않습니다만 대체할 만한 단어가 있는 경우에도 생각과 사람이라는 단어가 거의 두 세 문장 건너서 한 번씩 출현할 정도로 많이 그리고 다양하게 쓰이고 있었습니다. 대신 그때 그때 사용되는 의미의 차이가 미묘하게 있기는 했습니다. 그다지 중요하지 않은 문장을 중간에 끼워넣기 위해서 쓰이는 경우도 많았습니다. 즉 이야기를 전개하는데 핵심적인 부분에서는 쓰이는 경우는 많지 않았지만 뭔가 당위성이나 이유를 설명하기 위해서 표현한 문장들에서는 대부분 “사람”과 “생각”이 많이 쓰이고 있었습니다.
“사람들은 당연히 그렇게 생각하기 마련이다” 같은 문장 이라든가.
“그런 사람들은 많지 않을 것이 분명했다” 같은.
“그런 생각을 하며 쏜살같이 달려 나갔다” 라던가
물론 모든 소설이나 책들이 이러지는 않을 것이라고 생각합니다. (또 해봐야지)
다음에는 중간급 단어들이 어떤 특성이 나오는지 공휴일에 정말 심심해지면 해볼참입니다.

이 포스트에 결론은 없습니다.
그냥 직접 해보면 예상했던 것과 다른 것이 나오니 심심할 때 꼭 해보자라는 교훈을 답습했다는 것 정도.

 

Categories: Uncategorized Tags:

Jira GUI client

October 15th, 2011 No comments

이슈관리시스템으로 많이 쓰이는 것 중에 JIRA라는 반쯤은 상용인 제품이 있는데
대부분의 이슈관리시스템이 그렇듯이 웹기반으로 되어 있어
Interactive하게 관리하거나 기민하게 업데이트하고 관리하는 것이 조금 불편할 수 있습니다.

Jira는 웹기반이면서도 상당히 interactive하고 깔끔하고 편리한 UI를 제공합니다만
어쨌든 web browser내에서 작업해야 한다는 한계가 있습니다.
작업을 조금 하다보면 다른 사이트나 페이지의 탭에 가려 있어 집중적으로 모니터링하고 관리하기 쉽지 않습니다.

그래서 application 형태의 관리 소프트웨어의 필요성을 느끼게 되는데요.

찾아보니 Jira client라는 것을 ALMworks사에서 판매하고 있었습니다.
10 user 이하의 Jira를 쓰는 경우에는 lite 버전으로 무료로 쓸 수 있고
사용하고 있는 Jira가 10 user가 넘어가면 pro를 구매해야 합니다.
(Jira 서버에 등록된 사용자가 10 user 이하여야 한다는 얘기입니다)

lite버전으로는 10 user가 넘는 Jira에 접속을 하면 제대로 작동을 하지 않습니다.
10 user가 넘는지를 Jira에 접속한 후 확인합니다.
처음에는 10 user가 넘는 Jira server에도 접속이 가능하지만 user 수가 넘는 것이 확인되면
application이 바로 기능을 disable 해버립니다.

pro버전은 30일 trial로 사용하는 것이 가능하니 미리 사용해 보고 구매할지를 결정하는 것이 좋겠습니다.

여튼 lite 버전의 Jira 사용자 수 제한 때문에 결국은 아주 소규모로 관리하는 경우가 아니면
결국 돈을 주고 구매해야 한다는 것이겠고
10명 이하의 Jira그룹에서 Jira client까지 써야 할 정도로 복잡한 관리가 필요할지는 사실 의문입니다.

가격은 좀 비싼편입니다. 1 user용이 99$입니다.

다운로드설치는 아래 사이트를 방문해서 적절한 OS를 선택한 후에 다운받을 수 있습니다.

http://almworks.com/jiraclient/download.html

Jira client의 첫화면

JIRA Client.png

  • 매우 구리구리한 첫 화면
  • 좌 트리, 우 리스트 (좌청룡 우백호?)
  • 마치 메일 클라이언트를 보는 것 같은 화면 구성

거의 모든 Java로 작성된 GUI가 그렇듯이 UI가 그리 미려하지 않습니다.
심지어 font 크기도 조절하지 못합니다만
조금만 사용해 봐도 기능면에서는 상당히 괜찮다는 것을 알 수 있습니다.
Query를 다양하게 만들어서 계속 특정 그룹의 ticket들을 모니터링하거나
자기가 할당받은 issue에 대해서 working timer를 걸어두고
일을 한 후에 소모한 시간과 함께 work log에 update해주는 기능등이 있습니다.

Query 생성 화면

Select a Field to Create Distribution.png

Distribution 생성 화면

Create Query.png

Working Timer Tracker (작업한 시간 카운트)

Time Tracker-1.png

몇시간 써봤는데 상당히 맘에 들어 계속 쓸 생각입니다.
요약을 하자면 Jira client는 다음과 같은 기능들이 아주 괜찮습니다.

  • 작업시간타이머(working timer)는 작업기록(work log)에 기록할 때 일하는 소모한 시간을 타이머로 체크해서 update 기록해 줍니다.
  • Query를 쉽게 만들 수 있고 query 및으로 distribution이라는 것을 만들어서 각각의 세부항목으로 분기시켜 볼 수 있습니다. 몇번의 마우스 클릭 만으로도 잘 분배해 줍니다.
  • 검색이 쉽고 간단합니다.
  • 좌측의 tree 구조가 봐야 할 것들 해결해야 할 것들을 일목요연하게 보여주고 접근하게 해줍니다.
  • 여러 그룹의 Jira를 연결할 수 있습니다.
    • Apache등의 많은 오픈소스가 Jira로 관리되고 있는데 이런것들에 접근하면서 관련된 버그들을 tracking하거나 할 때 편리합니다.

이슈관리는 업무를 진행하는데 있어 매우 중요한 업무도구인 만큼
잘쓰는 것과 효율적으로 쓰는 것이 매우 중요하다고 생각합니다.

Jira의 웹화면 자체에 적응하는 것도 좋지만
웹화면자체에서 작업하는 것이 익숙하지 않거나
애플리케이션만의 빠르고 경쾌하고 고도화된 어떤 것들을 원한다면
업무효율을 위해서 이런 애플리케이션 형태의 클라언트를 사용해 보는 것도 괜찮을 것입니다.

 

참고로 제작사에서 deskjilla라는 bugzilla client도 판매하고 있습니다.
벅질라(Bugzilla) 이슈관리시스템으로 사용하고 있다면 고려해 볼 만 하겠습니다.

Categories: Application Tags:

기계학습, 데이터마이닝 시작하기

August 25th, 2011 No comments

기계학습과 데이터마이닝에 대한 얘기를 해 보려 합니다.

좀더 정확히는 기계학습을 잘 모르시는 분들이 처음에 기계학습에 대해서 어떻게 접근해서 반응하시는지에 대한 제 경험담과 주변의 다른 분들을 보고 느낀 것입니다.

기계학습은 매우 쉽습니다.

이런 얘기를 하면 광오하거나 교만하다고 생각하는 분들도 있겠지만 사실 개념 자체를 들어보면 중, 고등학생들도 다 이해할 수 있을 정도로 어렵지 않습니다. 물론 개념 자체가 난해한 고등한 부분 역시 있습니다만 처음 진입하는 부분에 있는 몇개의 유명한 알고리즘들은 어렵지 않은 편이라 생각합니다.

다만 쉽다고 하는 것이 정말 몇일 뚝딱뚝딱 해보면 되는 것이라는 그런말은 아닙니다. 이걸 착각하시는 분이 있습니다. 다른 물리학이나 고등과학에 비하면 쉬운 편이고 이론도 중요하지만 실행과 반복이 매우 중요합니다. 그런 의미에서 이론만 디립다 파고 살아야 하거나 실험에 전적으로 의존해야 하는 그런것들에 비해서는 매우 쉽습니다. 그리고 개념은 정말 쉬운 편입니다. 문제는 시행착오의 의한 경험이 축적되지 않으면 이 쉬운 개념을 실제로는 써먹지를 못하게 됩니다.

어쨌든 개인적으로 관심이 있거나 업무에 관련이 있어 기계학습을 속성으로 쉽게 접근해서 이해하려고 하는 코스는 보통 아래와 같은 방법입니다.

우선 Supervised learning(Classification)이나 Unsupervised learning(Clustering)이라던가 하는 기본적인 개념을 아는 사람이나 책 또는 인터넷 서핑을 통해서 배웁니다.  더불어 결정트리(Decision Tree)와 SVM(Support Vector Machine), K-means, Hierarchical clustering, Association Rule mining 어쩌고 하는 알고리즘등을 대략 어렴풋이 배웁니다. 대부분의 데이터마이닝 또는 기계학습의 기초 서적에 공통으로 언급되는 사실상 매우 기초적인 내용입니다.

이쯤되면 스스로 교만하게 생각하고 마이닝을 처리해주는 적당한 구현체(소프트웨어)를 찾습니다.
대략 RapidMiner, Weka, SAS, Orange를 비롯해서 심지어 Matlab이나 R같은 랭귀지도 있고 C++이나 Java로 구현된 library 형태로 된 독립된 구현체도 많이 있습니다.  
보통은 잘 알려져서 그런지 Weka를 많이 선택하더군요.

자 이제 그나마 기계학습에서 제일 무난한 Classification 같은 것을 하기 위해서 데이터를 구합니다.
본인이 업무에서 쓰는 것을 이용해도 되고 아니면 인터넷에서 뒤지면 샘플용 데이터가 많이 있습니다.  결정트리(Decision Tree)용 샘플 데이터 이런 것은 인터넷에서 검색하면 정말 많습니다.

그리고 나면 마련한 구현체나 소프트웨어에 학습데이터 넣고 돌립니다.

툴들의 기능이 아주 좋아서 메뉴에서 선택하고 데이터 지정하고 몇개의 파라미터만 결정해주면 그대로 모형을 하나 만들어 볼 수 있습니다.
K-fold evaluation이라던가 하는 것도 기본으로 다 지원하고 플롯도 이쁘게 잘 찍어 줍니다.

다 했습니다. 기본은 이것으로 끝입니다.

이제 기계학습을 할 줄 아는 것입니다. 
업무에 적용해 보는 일만 남았습니다.

여기까지가 보통 저 같은 구현체를 작성하던 엔니지어들이 맨 처음에 기계학습을 어설프게 접해보고 대 착각으로 접어드는 대표적인 코스입니다.  착각한 부분은 모형을 만드는 전체의 연습이 안된 것을 모르는 것입니다.
(사실 초보자가 데이터를 가져다 쓴 것부터가 잘못입니다. )

눈치채셨겠지만 여기까지 과정은 그저 Java나 C++같은 컴퓨터랭귀지 하나를 배워서 Hello world를 화면에 출력하는 프로그램을 작성한 것과 같습니다. Hello world는 특별히 다루어야 할 데이터가 없는 프로그램이기 때문에 문제가 없습니다만 기계학습이나 데이터마이닝은 데이터가 중심이라는 것이 다릅니다.

즉, 위 과정의 문제는 중간과정에 꼭 필요한 시행착오를 통해 경험을 겪어야만 알 수 있는 부분을 모두 skip해 버렸다는데 있습니다.

대략 3가지 부분이 빠진 것인데
첫째는 domain knowleage를 마이닝에 적용하는 과정에 대한 경험입니다. 로케트 발사대 만들어도 발사할 로켓이 없으면 쓸모가 없지요.
둘째는 data를 전처리하는 방법입니다. standaridzation이라던가 scaling을 하던가 feature를 위해 값을 생성해 내는 부분입니다.
세째는 feature를 control하는 방법과 그에 대한 insight, 즉, feature들을 결합하거나 빼거나 부족해도 모델이 잘 작동하도록 조절하는 방법입니다.
그외에도 평가를 해서 문제가 되는 부분을 파악하는 방법이나 알고리즘을 개선하거나 결합하는 방법들을 아는 것도 필요하지만 이 부분은 정말 어렵고 고등한 문제라고 생각해서 넣지 않았습니다.

위 세가지 중 두가지 이상을 경험해 보지 않았다면 기계학습은 제대로 해봤다고 하기 어렵습니다.
저 말고도 보통 기계학습을 오래동안 해 본 분들이  공통적으로 말씀하시는 부분입니다.

보통 구현체 엔지니어는 위에서 언급한 단기 속성과정을 겪고 나면 알고리즘을 어떻게 구현하는가 어떻게 구현체를 만드는가를 고민하고 집중하게 되는데 사실 그 부분은 아주 중요하지 않습니다. 꼭 그것을 해야 하는 경우가 많지 않기 때문입니다. 구현체를 만들고 그것을 검증하려면 많은 시간이 필요하고 지식도 많이 필요합니다. 그것보다는 domain에 따라 제대로 된 모델 하나 만드는 것도 녹녹치 않습니다.  있는 것 가져다가 제대로 활용하기도 쉽지 않은 것입니다. 이렇게 되는 까닭은 앞서 말씀드린 3가지 부분을 제대로 경험해 보지 못했기 때문입니다.

결론적으로 기계학습은 쉽지만 기계학습으로 쓸만한 모델을 만드는 것은 매우 어렵습니다.
말장난 같지만 개념과 초기에 진입하는데 필요한 지식이 많이 필요 없어 매우 쉽기 때문입니다.
하지만 자동차의 경우에도 엔진만 좋다고 좋은 차가 되는 것은 아닐 것입니다. 제어장치나 기타 주변부품과 에어로다이나믹 어쩌고 하는 유체역학 이런 것도 고려된 디자인까지도 중요할 것입니다.

알고리즘이 아주 좋고 구현체가 아무리 좋아도 제대로 된 모형을 만들지 못하면 써먹을데가 없습니다. 
이 부분을 이해하게 되면 얼마나 무지했는가를 비로소 자각하게 됩니다.

실제로 해봐야 하는데 문제는 보통의 경우에 실제로 해볼 만한 기회를 얻기가 쉽지 않다는데도 있습니다.

기계학습은 시작하기는 좋고 있어보이고 멋있어 보일지는 몰라도 단계별로 장벽을 깨면서 밟아가기는 너무 힘든 부분이 많습니다.

지적 호기심과 관심 또는 여타 다른 계기로 인해서 시작한 분들께 꼭 한 번 하고 싶었던 말을 포스트에 넉두리 삼아 올려 봅니다.

 

Categories: Uncategorized Tags:

Apache Mahout

April 10th, 2011 No comments

Mahout In ActionApache Mahout이 발표된지는 조금 오래 되었습니다. 2008년도 초반부터 프로젝트를 시작을 했으니 기간으로 보면 어느 정도 오래된 프로젝트라고도 볼 수 있습니다.  하지만 Mahout에 대해서 아시는 분들이 많지는 않더군요. 비교적 사용자층이 넓지 않을 수 있는 프로젝트라서 그런 것 같습니다.
기본적인 내용은 아래 사이트에서 확인할 수 있습니다.

http://mahout.apache.org/

Mahout은 Hadoop에 얹어 쓸 수 있는 Machine learning library 모음입니다. 단독으로도 수행이 가능합니다. Mahout에는 Classification, Clustering, Data mining 관련한 널리 알려진 알고리즘들이 구현된 라이브러리들이 Map/Reduce로 가동이 되도록 만들어져서 제공됩니다.
사실 관심은 있었지만 바쁘다는 핑계로 사용해 볼 기회가 별로 없었네요. 오늘 문득 생각이 나서 진행상황도 궁금하고 해서 들려보니 책도 훨씬 전부터 나와 있었군요. 아직 버전이 0.4인데다가 책의 버전은 더 낮아서 실망입니다 책을 구입을 할지 말지는 고민을 좀 더 해봐야 겠습니다.

Mahout은 버전이 글을 쓰는 이 시점에는 아직 0.4 에 dev 0.5 버전입니다. 제가 처음 보고 실행해 봤던 것이  0.2 때 였던것 같습니다. 당시에 시간을 잠깐 내서 단순하게 원하는 알고리즘이 작동디는지 실행을 해 봤습니다만 그다지 매끄럽게 작동을 안했던것으로 기억합니다.
Mahout에 관심이 가는 이유라고 한다면 기존에 사용하던 Machine learning 관련 알고리즘 구현체들을 Hadoop갈은 분산환경에서 Map/Reduce로 바꾸는 것은 생각보다 쉽지 않습니다. 얼핏 생각하면 쉽게 될 것이라고 생각하지만 의외로 단순한 문제는 아닐 수 있습니다. 알고리즘 자체가 단순한 것이 아니면 Map/Reduce로 구현하기 위해서 머리를 많이 써야 하고 실제로 작성한 것이 효율적으로 구성이 되었는지도 확신하기 힘들때가 많습니다.
누가 만들어 놓은거 없나? 하고 찾다가 알게 된 것이 Mahout입니다.
사실 기존 기계학습 알고리즘들을 병렬처리로 운용하기 위한 방법들에 대한 논문을 쓰시는 분들도 꽤 됩니다. Mahout은 이런 고민을 해결해 주는 단비같은 구현체입니다. 시간이 나면 사용해 보려고 했으나 아직은 저도 사용은 해보지 못했습니다.
사실 최근에 지인을 통해 확인을 해 본 결과 아직도 버그가 너무 많아서 쓰기가 애매하다는 짧은 코멘트를 받았습니다.
어느 부분의 버그인지는 나중에 시간 나면 한 번 설명을 들어야 할 것 같습니다만 버전업도 빠르게 되는 것이 아니어서 가끔 있다는 사실을 까먹을 때가 많습니다.  사용자가 그리 많지 않아서 인지  모르겠습니다.
사실 아직까지 업무상 기계학습을 Map/Reduce환경에서 돌릴 필요가 많지 않은 것 같습니다. 데이터마이닝의 몇몇 알고리즘은 당연히 대용량을 처리하는 경우라면 Map/Reduce로 재구성해서 Hadoop에서 운용하는 것이 필요하지만 기계학습의 모델을 빌드하는데에는  시간이 많이 걸리지 않으므로 필요하지 않았습니다.
자연어처리하시는 심하게 연구하시는 분들이나 바이오인포매틱스쪽에는 현재에도 있는 것 같습니다만 정보가 없어서 잘 모르겠습니다.
여튼 현재는 많이 필요하지 않다고 하지만 대용량의 데이터를 분석해서 뭔가를 추출하고 처리하는 것 뿐만 아닌 대용량의 데이터를 학습해야 하는 시대가 되가고 있는 것 같습니다. 많은 양의 문서 자동 분류등을 한다고 할 때 많은 양의 학습데이터가 반드시 필요한 것은 아닙니다만 문서들의 절대양이 증가함에 따라 점점 많은 양의 학습데이터도 학습을 해야 할 시점이 되가고 있고 Active learning같은  iteration을 많이 돌아야 하는 과정을 수행시켜야 한다면 역시 마찬가지라고 생각됩니다.
학습해야 하는 양이 많아지니 분산환경으로 옮겨야 되겠다는 생각이 슬슬 들고 있는 도중에 포스트 올려 봅니다.

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

December 10th, 2010 No comments

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.96*sqrt(p*(1-p)/n)
또는 Z crit * stdev / sqrt(n)

표본수가 매우 큰 경우 즉, 무한모집단이면 보통 모집단은 정규분포(Normal Distribution, Gausian Distribution)를 따르는 것으로 가정합니다.  자연계의 거의 모든 확률 분포는 정규분포를 보편적으로 따릅니다. 즉, 중심극한원리 (Central Limit Theorem)에 의해서 표본(Sample)의 양이 충분하다면 정규분포를 따르게 됩니다. (반드시 그렇지는 않습니다)
여기서 표본 오차를 구하려면 표본집단에서의 표준편차나 모집단의 편차가 필요합니다. 모집단의 표준편차가 없는 경우 표본집단의 표준편차를 이용하게 되는데 보통의 경우 모집단의  표준편차(또는 분산)을 구할 수(알 수) 없는 경우가 대부분입니다.
아래는 여기저기서 긁어 모은 오차범위를 구하는 것에 대한 예제풀이입니다. (워낙 마구잡이로 긁어오다 보니 출처가 엉망이 되었고 내용을 제가 많이 편집해서 출처는 따로 기재하지 못했습니다. 혹시 문제가 된다면 알려주시면 바로 지우도록 하겠습니다.)

예제1)
n(표본수) = 1000명 일 경우 (보통 여론조사에서 1000명을 한다고 합니다. 그러고보니 뉴스에서 1000을 대상으로 했다고 하는 것을 많이 들은 것도 같은…)
(±)1.96 * sqrt(0.25/1000) = 0.0309. 여기에 100을 곱하면 3.09
1000명일 경우는 표본오차가 대략 (±)3.1%
n(표본수) = 600이라면 같은 방식으로 계산해서 (±)4.0%

※ 0.5*0.5를 하는 이유
여기서 0.5*0.5는 최대허용오차(중요)로 0.5*0.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.5*0.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

October 20th, 2010 No comments

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에 붉은색 영역에 비싼 광고를 배치하면 잘 되겠네 라고 생각하는 것입니다. 반드시 그렇지 않을 수도 있습니다.

Above The Fold line

September 18th, 2010 No comments

Above The Fold Line

줄여서 ATF 혹은 ATFL 이라고 많이 부릅니다.
특별한 행동을 취하거나 노력을 들이지 않고 어떤 출판물에서 보여지는 영역을 의미합니다. 즉 순간적으로 시선이 닿았을 때 노출되는 hot spot 영역을의미합니다. 웹검색이나 웹서비스, 웹포탈에서는 일반화된 용어입니다만 관련분야외에서는 이 용어를 잘 모르더군요. 행동과학등이나 마케팅 측면에서도 상당히 중요한 용어입니다.

수정하면서 스크린샷을 한 번 넣어봤습니다. ATFL라는 용어의 어원은
신문(News paper)등을 가판대에서 판매 할 때 반으로 접어서 판매하는데 접혔을 때 보통 헤드라인이 보이게 되고 그 밑에 중요한 뉴스가 보이게 되서 관심이 있는 사람은 신문을 구매 하게 되는데요. 거기에서 시작된 용어라고 합니다만 제가 어원을 확실하게 추적해보지 않아서 정확하지는 않을 수 있습니다.

웹페이지의 관점에서 ATF는 웹 브라우저에서 스크롤바를 내리지 않고 눈으로 볼 수 있는 페이지영역을 말합니다. 일반적인 디자인이나 출판에서 말하는 것과는 다소 차이가 있습니다. 웹브라우저는 종이처럼 접히는 것은 아니니까요.
스크린샷에서는 아래쪽 빨간 가로선 까지의 영역을 말합니다. 오른쪽에 보시면 스크롤을 더 내려야 볼 수 있는 영역이 많이 있음을 알 수 있습니다.
참고로, 이 때의 웹 브라우저의 창사이즈는 전체화면을 다 차지하고 있는 full size의 상태인 것으로 간주합니다. 이는 보통의 사용자는 웹 브라우저를 거의 최대에 가까운 사이즈로 놓고 사용하기 때문입니다. 해상도는 그 당시에 가장 많이 보유되어 있는 모니터사이즈와 그래픽카드의 성능에 따라 달라지는데 현재는 1280*1024 정도로 봅니다. 해상도는 계속해서 모니터링해서 주 대상이 되는 사용자들의 Majority 해상도를 인지하는 것도 중요합니다.

ATF를 따로 용어로 만들어서 말하고 언급하는 가장 중요한 이유는 하나입니다.
사용자의 클릭의 대부분을 받는 영역이기 때문에 잘 이 영역에 뭔가를 잘 배치해야 좋은 결과 즉, 금전적 이익이나 서비스의 기능을 제대로 보여줄 수 있습니다.
즉, 이 영역을 어떻게 활용하는 가에 따라서 서비스의 흥망이 결정될 수도 있습니다.

  1. 사용자의 시선을 받는 가장 첫번째 영역(첫번째 인상을 줄 수 있는 영역)이고
  2. 이 영역밖의 페이지, 그러니까 스크롤바(scroll bar)를 내려서 봐야 하는 영역은 사용자의 행동과 노력을 요구합니다. 그런 것을 잘 하지 않는 사용자들도 상당히 많습니다.
  3. ATF밑의 페이지에 있는 정보를 보기 위해서는 스크롤바를 – 마우스나 단축키를 이용해서 – 내려야 하는데 ATF밖의 1차적으로 사용자의 첫번째 시선에서 박탈당하기 때문에 노출될 기회마저 박탈당할 확률이 매우 높아서 이 쪽에 위치한 링크들은 클릭비율이 높지 않습니다.

ATF 밖의 영역에 대해서 말하자면 이 부분의 문제는 사용자가 이 부분의 정보를 확인하기 위해서는 노력이 든다는 것입니다.
즉, ATF안에 원하는 정보가 없을 경우 사용자는 다음과 갈은 행동 패턴 중에 하나를 취하게 됩니다.

  1. 스크롤바를 눌러서 결과를 확인하거나
  2. 다른 곳(다른 사이트)으로 이탈하거나
  3. 또는 ATF안에 있는 링크 중 가장 그럴듯한 것을 클릭

우선 순위는 없습니다. 다만 웹사이트나 property(웹사이트 안에서의 단위 서비스)에 따라 사용자가 많이 취하는 행동들의 우선순위가 달라집니다.

앞서 말씀드렸듯이 보통 사용자들은 스크롤이 긴 경우에는 스크롤바를 끝까지 내리려 하지 않습니다. 사용자들은 매우 성급하고 힘들게 뭔가를 찾는 행위를 싫어합니다.
이 것은 eye tracking test(사용자의 눈동자를 추적해서 행동패턴을 추적하는 close 테스트)의 결과에도 빈번히 나오는 이제는 정말 흔한 리포트입니다.
그리고 스크롤바를 내리면 내릴 수록 더 중요하지 않을 것이라는 사용자 나름대로의 판단을 하기 때문에 동일한 정보가 노출되도 사람들 마음속에서는 어떤 링크나 정보가 페이지의 하단부에 있을 수록 weighting해서 중요도 점수를 스스로의 마음속에서 자연스럽게 감점해 버립니다.
사용자들도 하단부에 위치한 것들은 랭킹에 밀렸거나 많이 중요한것이 아니라는 것을 알고 있다는 것인데 이미 사용자들도 웹페이지의 노출방식에 훈련이 되어 있기 때문입니다. 사용자들은 이미 역으로 웹서비스의 천편일율적인 노출방식에 대해 습관 또는 학습된 행동으로 이러한 reaction을 취하는 것이고 이제 는 이에 역행하는 노출방식이나 디스플레이 방식은 스스로 거부하려합니다.
다만 리스팅형(나열해서 뭔가를 보여주는 형태)이 아닌 Front door page(포탈사이트의 맨 처음 페이지)의 경우에는 패턴이 다른 것으로 알고 있습니다만 이쪽은 제 관심밖이라 아는 것이 많지 않습니다.

ATF에 관한 세부적인 것이나 가장 중요한 hot spot(자주 노출되거나 클릭하는 영역), click rate(링크 클릭 비율), behavior pattern(원하는 것을 찾아가는 행동 패턴)은 UI(User interface)나 여러가지 세부적인 요소에 따라 다소 차이가 있을 수 있습니다만 기본적으로는 거의 모든 웹사이트가 유사한 것으로 알고 있습니다.
보통, 어떤 검색포탈사이트의 검색결과에서 두 번째로 시선을 받는 중요한 위치는 보통 광고가 차지합니다. 검색 포탈이라면 키워드광고가 나오는 곳입니다.
구글, 네이버, 야후 다 똑같습니다.
구글은 east rail(검색결과 페이지에서 오른쪽 컬럼)에 나오지 않느냐? 라고 물으시는 분이 있는데 찾아 보시면 중앙 부분에 광고가 노출 되는 것들이 있습니다.
첫번째의 시선받는 곳은 메뉴나 주요기능이 차지합니다. 검색포탈이라면 검색입력상자(Search bar)나 그런것들이지요. 여기에 광고를 싫지는 않습니다만 최근에는 검색입력상자에 키워드등을 광고형태로 노출해서 검색을 유도하는 것도 보실 수 있습니다.

보통의 포탈사이트에서 왜 광고나 각종정보를 첫페이지의 상단부에 덕지덕지 붙이고 가능한 중요한 단어들만 나열해서 백화점식으로 나열하는지에 대한 첫번째 이유중 하나와도 ATF는 관련이 있습니다.
저렇게 하고 싶지 않고 천편일률적인 나열방식을 거의 모든 포탈이 채택하고 있어 차별화가 안되지만
바꾸려고 해도 이미 사용자가 그것을 허락하지 않기 때문에
그렇게 하지 못하는 것입니다.

Categories: Frontend, HCI Tags:

MacJournal wordpress sync-up

September 17th, 2010 No comments

macjournal과 wordpress의 연동을 테스트하고 있습니다.
현재까지는 잘 되는 것 같습니다.
ecto 나 macjournal를 사용하고 싶어서 사용하던 textcube를 버리고 wordpress로 돌아왔습니다.
ecto의 경우는 textcube와도 연동이 잘 됩니다만 별로 마음에 들지 않고
macjournal을 쓰고 싶은 이놈의 textcube가 제대로 연동이 안되더군요.
줄바꿈이라던가 여러가지 세세한 부분에 연동이 안되는 것 때문에 삽질을 많이 했습니다.
제가 뭘 잘못했는지는 모르겠지만
아무튼 시간소모가 너무 많아서 아예 macjournal에 잘 붙는 wordpress로 블로그소프트웨어를 바꾸고 몽땅 정리해 버렸습니다.
Wordpress는 이전에 사용해 본적이 있어서 이번에는 movable type을 사용해 보려고 했지만 제가 이용하는 웹호스팅 서버에서 설치하기가 다소 복잡하고 귀찮아서 그냥 wordpress를 설치해버렸습니다.
perl CPAN의 압박과 지원 안되는 몇가지 것들이 귀찮게 하네요.
블로깅 전용으로 쓰려는 용도면 ecto, notebook 등등 중에서 Macjournal이 제일 나은 것 같습니다.
기존글은 백업은 받아놨지만 필요 없는 것들은 지우고 다시 올릴까 합니다.