5주차: 위기를 기회로

Journal : 2012.02.06 13:58   By LiFiDeA
반성 및 계획
SIGIR논문 마감에 WSDM 학회 준비가 겹쳐 바쁜 한주였습니다. 주중 내내 밤까지 일해야 했고, 주중 대부분의 시간을 학교가 있는 앰허스트에서 보냈습니다. 여러모로 좋은 여건이 아니었지만, 결과는 비교적 좋았습니다. 특히 평소 취약점이었던 저녁 및 주말 시간을 효과적으로 보냈습니다. 


저의 평가기준이 스스로를 얼마나 한계 너머로 밀어올리느냐에 좌우되는 점을 감안하면,  이번 한주간 외부적인 이유로 가졌던 긴장감이 제 자신의 한계를 뛰어넘게 도와준것 같습니다. 평소에 느슨함에 제대로 보내지 못하던 저녁 및 주말 시간어 더 좋은 성과가 나왔다는 점에서 더 그렇습니다. 안철수교수님이 게을러지는것을 막기 위해 잡지에 일부러 투고요청을 했다고 하셨는데, 앞으로도 끊임없이 긴장할 수 있는 요인을 만들어주는 것은 좋은 습관으로 보입니다. 

또한, 예전에는 일단 컨디션이 악화되면 하루 종일 저조했던 경향이 있었는데, 이번주에는 오후보다 밤에 더 좋은 성과를 거둔 경우가 3번이나 나왔습니다. 또한 컨디션이 아주 좋지 않은 경우는 아예 푹 쉬어주었습니다. 자주 느끼는 것이지만, 뭘 할까 망설이다 이도 저도 못하는 경우가 가장 후회스러운데, 이번주 저녁은 일을 하거나 쉬거나 만족스런 시간을 보낼 수 있었습니다. 

어쨌든 이번주 성과는 외부적 요인의 영향이 크기에, 지속 여부는 좀더 지켜봐야할 것 같습니다.

읽고 배운 것

이번주에는 SWIRL에 소개된 논문을 몇편 읽었습니다. SWIRL은 IR 분야 대가급 연구자들이 5년에 한번씩 모여 분야 전체의 전망 및 현안을 논의하는 자리입니다. 참가자들이 자신이 중요하다고 생각하는 논문/기사를 3개씩 추천하도록 요청받아, 이를 행사 홈페이지에 올려놓았습니다. 검색 연구의 현재 및 미래를 훑고싶은 분들이라면 추천작들의 제목만 보셔도 큰 도움이 될 듯 합니다. 

http://www.cs.rmit.edu.au/swirl12/discussion.php
 
신고

최근까지 4회에 걸쳐 1월 한달동안 제 생활에서 수집한 데이터 분석 결과를 올렸습니다. 그동안 과정없이 결과만 올려왔는데, 오늘은 데이터 수집 및 분석 과정을 좀더 자세하게 써볼까 합니다. 궁금해하시는 분들도 있었고, 이런 노력이 제 스스로 방법론을 체계화하는데도 기여하지 않을까 하는 바램입니다. 

목표 : 삶의 순간 순간을 최선으로 만들기

다소 추상적으로 들리지만, 저의 Self-tracking 목표는 항상 일관되게 '스스로 최선이라고 느낄 수 있는 순간순간을 보내기'입니다. 이는 포괄적인 의미에서 '행복도'라고 부를수도 있을 것이며, 어떤 객관적인 지표가 아닌 자신의 직관에 의존한다는 측면에서 정서적이며 현재 지향적인 지표입니다. 이를 질문의 형태로 표현하면 다음과 같습니다.

나는 주어진 일(시간)을 진정으로 즐기고 있는가?

사실 '최선의 순간'이라면 단지 즐기는 것을 넘어 좋은 결과 및 중장기적 의미를 고려해야 할 것입니다. 이를 '즐거움' (혹은 행복)으로 요약한 이유는, 어떤 일을 진심으로 즐길 수 있다는 것은 이미 직관적으로 최상의 일을 최선을 다해 하고 있다는 것을 함축(imply)한다고 생각하기 때문입니다. 당장 즐겁더리도 마음 속에서 거리낌이 있다면 진정으로 즐기지 못할 것입니다.

물론 종종 즐거움보다는 '필요'를 위해 어떤 일을 해야하는 상황에 마주하게 됩니다. 또한 예기치 못한 상황 등으로 어려움에 처하기도 합니다. 따라서 이러한 평가에는 항상 주변 상황에 대한 고려가 필수적입니다. 예컨데 몸이 아픈 상황에서 비교적 일을 잘 마쳤다면 좋은 평가를 받을 수 있을 것입니다. 구제적으로, 저는 다음 1~5의 스케일로 아침/점심/저녁의 생활을 평가합니다. 

1 : 최악 : 기록적인 실패, 삶에 지속적인 악영향
2 : 부정 : 기대에 못미침
3 : 보통 : 평균적임. 특이사항 없음
4 :  긍정 : 기대 이상
5 :  최상 : 기록적인 성공, 자신의 한계를 넒힘
위 평가 항목을 보면 주로 스스로의 '기대'에 근거하여 평가가 이루어지는데, 이는 어제의 자신보다 더 나아지기를 바라는 바램을 담는 것입니다. 이중, 최악 혹은 최상의 평가치는 그 결과를 나중에까지 기억해두어야 될 정도인 경우에만 부여합니다. 매우 주관적이고 개인적인 가치가 반영된 평가기준이기는 하지만, 거의 10년간 어떤식으로든 평가를 내려온 탓에 제게는 매우 익숙한 방식입니다. 

데이터 수집 : Evernote로 일지 작성

위 목표를 염두에 두고 저는 그동안 다양한 기법을 시도해 보았습니다. 대학원에 진학하기 이전인 2002년에서 2006년까지 스스로 개발한 프로그램 (설명은 작년 포스트 참조) 을 사용했었습니다. 하지만, 좋은 프로그램도 많이 나왔고 스스로 개발 및 유지보수하는 노력도 만만치 않아 어느순간 '있는 프로그램을 잘 쓰자'는 쪽으로 마음을 바꾸었습니다.

 작년까지는 온라인 스프레드시트를 사용해 왔습니다. 온라인 스프레드시트를 잠깐 소개하면, 아래와 같은 시간표에 주요 일정에 대한 계획 및 진행사항을 기록하는 것입니다. 


스프레드시트의 특성상 통계 및 그래프 처리가 간편하고, 온라인 서비스 (Google Docs)를 사용하면 어디서든 데이터에 접근가능하다는 장점이 있습니다. 하지만, 고정된 틀에 넣기에는 데이터에 부가정보가 많았습니다. 또한 테이블에 매일 삶의 기록을 입력하는 것은 '손맛'이 그다지 좋지 않았습니다. (하루에도 몇번씩 기록해야 한다면 중요한 고려사항입니다 ;)

그래서 최근에 사용하고 있는 방식이 주간 일지를 Evernote로 쓰는 것입니다. 그날 그날의 느낌, 한 일 및 결과, 보고 들은 것등을 한곳에 기록할 수 있으니 편리하며, 줄글 및 서식을 섞어 쓸 수 있으니 형식에도 구애를 받지 않게 됩니다. Evernote 컨텐츠는 PC / iPad / iPhone에 모두 동기화된다는 점도 데이터 접근성을 높입니다. 아래는 제가 사용하는 Template의 일부입니다. 


위의 Google Doc문서과 비슷한 내용을 담고있지만, 훨씬 더 유연하게 기록할 수 있습니다. (예컨데 오전 평가치가 4에서 3으로 바뀌었다면 4-3으로 기록합니다.) 기본적인 일정 목록에 다양한 기호를 정의하여 일정의 특이사항을 기록합니다. 일정을 기록하다보면 종종 뒤로 미루어야 할 일이 생기는데 이런 경우 일정 앞에 '>'기호를 사용하여 이를 표시합니다. 주단위로 문서를 생성하는 이유는 한주의 일정을 한 페이지내에서 볼수 있기 위함입니다.

기록 방법은 앞으로 더 보완해야겠지만, 그동안 얻은 교훈은 최대한 자신에게 자연스러운 방식으로 해야 더 풍부한 내용을 지속적으로 기록할 수 있다는 점입니다. 즉, 분석단계에서의 편리함도 중요하지만, 제대로된 데이터가 입력되지 않으면 분석은 가치를 잃습니다. 그것이 제가 얼핏 더 Low-tech로 보이는 줄글 및 목록을 결합한 형태의 기록방식을 사용하는 이유입니다.

데이터 분석 : Excel + R

수집된 데이터는 매주 엑셀 Sheet에 옮겨 기록합니다. 시간이 날때 Evernote API를 사용해 주간일지 문서에서 평가치 등등을 자동으로 추출하는 스크립트를 만들 생각입니다만, 평가를 위해 주간 일정을 옮겨적는 과정에서 그주에 있었던 일을 돌이켜보는 기회를 얻는다는 장점도 있습니다. 

이 과정이 끝나면 그동안 여기 올렸던 컬러풀한 테이블이 나옵니다. 마지막으로 이 테이블을 R에 넣어 분석합니다. 데이터가 작은 관계로 눈으로 보는 것만으로 다양한 통찰을 얻을 수 있습니다.  앞으로 회귀분석 (regression), 시계열 분석 등 좀더 다양한 방식을 시도할 생각이지만, 아직은 변수간 상관관계 분석으로 만족하고 있습니다. 작은 데이터에 대한 간단한 분석을 위해 너무 복잡한 기술을 동원할 필요는 없다는 것도 그동안 얻은 교훈입니다. 

글을 마치며

처음에는 (지금도 가끔) 자신의 생활을 숫자로 평가한다는 것에 거부감을 가졌었습니다. 하지만, 종종 (스스로에게) 더 좋은 평가를 받기위해 노력하는 자신을 보면서, 그리고 수집된 데이터가 일깨워주는 교훈을 느끼며 이런 노력이 단지 시간낭비는 아니라는 확신을 갖게 됩니다. 지금도 많은 사람들이 자신만의 방식으로 스스로를 파악하고 변화시키기위해 노력하고 있습니다. (참조 : Quantified Self, The Happiness Project )

1월의 분석은 현상 파악에 집중했지만, 2월부터는 변화를 실천하며 이것이 삶에 미치는 영향을 살펴볼 생각입니다. 즉, 이미 대조군(control group)이 마련되었으니, 실험군을 만들어 차이를 지켜보는 것입니다. 이렇게 생각하니 삶 자체가 거대한 실험처럼 느껴지는군요. 여러분은 지금, 어떤 실험을 하고 계신가요?

신고

반성 및 계획
새해 첫주에 시작하여 이제 4주차, 역시 논문 작업에 주력한 이번 주는 분명 '후퇴'에 해당하는 결과를 얻었습니다. 주초의 컨디션 난조가 월요일까지 나쁜 영향을 미쳤고, 화요일에 일단 회복을 했지만, 수/목을 거쳐 다시 무너지고 말았습니다. 결과적으로 주간 평점 3이 무너지고 말았습니다. 화요일은 수면/기상시간을 기록하지도 못했습니다.

지난주 말에 자기통제에 대한 독서를 하며 의욕적으로 출발했지만, 이론적 지식만으로는 별 차이를 만들지 못한다는 교훈을 얻었습니다. 또한, 시간대별로는 아침보다는 오후, 이보다는 저녁의 낙폭이 컸습니다. 일요일부터 금요일까지 붉게 물든 점수표를 보실 수 있습니다. 자기통제가 약화되는 시간대가 위기에도 취약하다고 느꼈습니다. 


1월 전체 데이터에서 뽑아낸 변수들간의 상관관계는 다음과 같습니다. 1주차 데이터로도 관찰한 내용이지만, 늦은 수면 및 기상시간은 다음날에 나쁜 영향을 미칩니다. 또한 재미있는 사실은 아침의 평가치가 미약하지만 낮/저녁의 평가치와 음의 상관관계를 갖는데 반면에 오후의 평가치는 저녁과 비교적 높은 양의 상관관계를 갖는다는 점입니다. 
 


이렇게 1월의 Self-Tracking 실험을 마쳤습니다. 1월에는 별다른 실천사항 없이 데이터를 수집하면서 현상을 정확히 이해하는데 주력했습니다. 1월의 주요 교훈을 정리하면 다음과 같습니다.  2월부터는  뭔가 실행에 옮기면서 변화를 모색해보려고 합니다. 

- 피로하고 긴장이 풀리는 저녁 시간을 만족스럽게 보내기가 어렵다.
- 컨디션 난조가 찾아오면 회복에 며칠의 시간이 걸린다. (2주 / 4주의 슬럼프)
- 다음날을 잘 보내기 위해서는 일찍 자고 일찍 일어나야 한다.

읽고 배운 것
자기 변화 실천에 대한 가르침을 찾으려는 찰나에 재미있는 책을 발견했습니다. The Happiness Project라는 이름의 이 책은 변호사 출신의 여류 작가가 더 행복해지기 위해 1년간 기울인 노력의 기록입니다. 행복이라는 눈에 보이지 않는 목표를 위해 '자기전에 주변을 정리하기'등의 눈에 보이는 실천사항과 매달 바뀌는 미션을 세웠습니다. 행복 프로젝트를 시작하기 전에 참고문헌 및 자신의 특성에 대해 꼼꼼하게 기록한 점도 흥미로웠습니다.

예전에 Quantified Self라는 곳을 소개했지만, 이 책의 저자 역시 블로그를 통해 활발하게 독자들과 소통하고, 다른 사람들의 행복 프로젝트를 지원하고 있습니다. 저의 작은 노력도 1년을 지속할 수 있다면 이분이 했던 것처럼 뭔가 결과를 얻을 수 있지 않을까 합니다. 자신의 삶을 스스로의 힘으로 바꿔보려는 모든 분들께 화이팅을 보냅니다!

신고
반성 및 계획

논문 작업에 많은 시간을 할애한 지난 주의 결과는 현상 유지에 가깝습니다. 주중에 만족도가 떨어지는 경향이 이어졌고, 밤에도 그다지 좋지 않았습니다. 학교에서 일했던 화/수에 피로가 쌓였었고, 목요일에 집에서 일하면서 좋은 결과가 있었지만, 금/토는 다시 조금 무기력한 모습이었습니다. 지난주의 특이사항으로는, 전날 저녁의 상태가 다음날 전체에 큰 영향을 끼치는 것을 (correlation: 0.5)볼 수 있었습니다. 지난주에는 또한 운동여부와 시간을 보낸 장소를 기록사항에 추가했습니다.


주간 리뷰를 올리겠다는 포스팅을 엇그제 한것 같은데, 벌써 이번주가 일월의 마지막입니다. 다음 주에는 1월 데이터를 사용한 좀더 자세한 분석과, 데이터 수집 방식에 대한 좀더 자세한 설명을 올릴까 합니다. 

읽고 배운 것 
몇주간 주간 리뷰를 수행하며, 데이터에서 배운 교훈을 적용하여 행동을 변화시키는 것이 그다지 쉽지 않다는 것을 깨닫고 오늘은 Harvard앞 서점에서 Self-control / Motivation에 관한 책을 훑어보았습니다. (아래 사진) 이중 Man Seeks God이라는 책은 예전에 Inuit님께서 소개해주신 '행복의 지도'라는 책의 저자가 세계 각지를 돌아다니면서 신의 의미를 탐구하는 내용입니다.


다음은 읽은 내용에 대한 간단한 요약입니다. 요즘 이런 종류의 책을 보면서 느끼는 것인데, 대부분의 Self-help책들이 어떤 식으로든 Neuroscience / Psychology 학자에 의해 씌여지고 있거나, 관련 연구 결과를 인용하고 있습니다. 얼만큼 신빙성있는 인용인지는 모르겠지만, 일단은 바람직한 경향으로 보입니다. 2월의 계획은 1월중의 데이터 분석 및 이러한 책에서 배운 내용을 바탕으로 변화를 계획하고 실천하는 것입니다.
  • Why we do what we do
    • The best way to motivate people is to support the sense of autonomy. 
    • How can I create the condition within which people will motivate themselves?
    • In how much of your time are you autonomous and authentic?
  • The Winner's Brain
    • Focus / Motivation / Self-awareness / Emotional balance / Resilience / adaptation / brain maintenance / memory
    • Goal laser / optimal risk gauge / talent meter/ opportunity radar / effort accelerator
  • Willpower
    • Willpower actually operates like a muscle: it can be strengthened with practice and fatigued by overuse. 
      •  You learn not only how to build willpower but also how to conserve it for crucial moments by setting the right goals and using the best new techniques for monitoring your progress. 
    • Willpower is fueled by glucose, and it can be bolstered simply by replenishing the brain's store of fuel. 
      • That's why eating and sleeping -- and especially failing to do either of those -- have such dramatic effects on self-control

신고

요즘 대부분의 시간을 Cambridge에서 보내는 관계로 오늘은 MIT의 Big Data Processing에 관한  겨울 수업에 잠깐 들어갔습니다. 오늘 수업은 MapReduce에 관한 것이었는데, MapReduce자체가 새로울 것은 없지만, 개념부터 Amazon Web Service를 사용한 실전까지 1시간 내에 따라해볼 수 있는 내용이라 여기서 간단히 소개합니다. 

http://dataiap.github.com/dataiap/

대부분 아시겠지만, MapReduce는 대용량 데이터 처리를 위한 프레임웍으로, 구글 논문에 처음 소개된 이래로 Yahoo 주도로 개발한 Hadoop 프레임웍이 널리 사용되고 있습니다. 최근에는 Amazon Web Service에서 가입형으로 사용할 수 있는 MapReduce 클러스터를 제공하여 Netflix를 포함한 많은 기업에서 활용하고 있습니다. 

오늘 실습은 MapReduce Python를 사용하여 Enron 이메일 코퍼스의 문서별 단어개수를 세고, 이를 Amazon클러스터에서 실행하는 것이었습니다. 구체적인 내용은 오늘의 강의자료를 참조하시고, 저는 맛보기로 여기 제가 실행한 코드와 결과물을 올릴까 합니다. 강의에서는 이를 좀더 심화하여 tf-idf계산까지를 다루었습니다. 

import sys
from mrjob.protocol import JSONValueProtocol
from mrjob.job import MRJob
from term_tools import get_terms

class MRWordCount(MRJob):
    INPUT_PROTOCOL = JSONValueProtocol
    OUTPUT_PROTOCOL = JSONValueProtocol

    def mapper(self, key, email):
        for term in get_terms(email['text']):
            yield term, 1

    def reducer(self, term, occurrences):
        yield None, {'term': term, 'count': sum(occurrences)}

if __name__ == '__main__'
MRWordCount.run() 
mapper에서 문서별 단어 개수를 세어 이를 단어별로 모아 reduce에서 합산하는 위 예제 코드를 아마존 클러스터에서 실행한 결과는 다음과 같습니다. 약 17~8분 정도에 완료되었습니다. (저도 아마존 클러스터는 처음 사용해 보았습니다.)

Running time was 1051.0s (not counting time spent waiting for the EC2 instances)

ec2_key_pair_file not specified, going to S3

Fetching counters from S3...

Waiting 5.0s for S3 eventual consistency

Counters from step 1:

  FileSystemCounters:

    FILE_BYTES_READ: 197488305

    FILE_BYTES_WRITTEN: 58258678

  Job Counters :

    Launched map tasks: 167

    Launched reduce tasks: 33

    Rack-local map tasks: 167

  Map-Reduce Framework:

    Map input bytes: 1405888038

    Map input records: 516893

    Map output bytes: 585440070

    Map output records: 49931418

    Reduce input groups: 232743

    Reduce input records: 49931418

    Reduce output records: 232743

    Reduce shuffle bytes: 26548380

    Spilled Records: 134445547  

사실 이 자체가 대단한 내용은 아니지만, 아직도 국내에서 신기술로 인식되고 있는 MapReduce가 (요즘은 안 그런가요?) 미국 대학의 교양 강좌에 소개될 정도로 툴 및 인프라가 발전했다는 사실을 느꼈습니다. MapReduce를 검색에 사용하는 방법을 좀더 배우고픈 분들은 Maryland의 Jimmy Lin 교수가 공개한 온라인 책을 읽어보시고, 위 수업에서는 이외에도 Python을 사용한 통계 및 데이터 시각화를 다루니, 참고하시기 바랍니다. 

신고

티스토리 툴바