2016년 1월 31일 일요일

[머신러닝] 최소자승법(Least Square Method)

 이번에는 시계열 분석에 사용되는 최소자승법에 대해 알아보겠다. 예를 들어, 대학교 입학성적이 대학교 재학 중 학업성적에 미치는 영향을 조사하기 원한다고 가정하자. 이를 위해 6명의 재학생의 입학성적(x1=수능성적, x2=학생부 성적)과 학생들의 대학 재학시 총 평균학점(y=GPA)의 자료를 얻었다.


이 자료를 근거로 재학생의 학업 성취도가 대학 입학성적과 어떤 연관이 있는지 살펴 보려면 

Y = a1x1 + a2x2    (1.1)
 을 만족하는 a1, a2 값을 정하면 된다. 여기서 a1은 수능성적이 1점 상승할 때 대학에서의 GPA가 얼마나 오르는지에 대한 증가량을 나타내며 a1>0이면 수능 성적이 높을 수록 GPA가 높아짐을 의미한다. 모든 자료가 식 1.1을 만족시키는 것은 불가능하기 때문에 오차항(error) ei을 이용하면 i 번째 학생의 경우

yi = a1x x1i  + a2 x2i + ei    (1.2)

라는 모형식을 가정 할 수 있다. 이를 행렬식으로 표시하면 y = Xa+e라고 할 수 있다. 그리고 여기서 a값을 결정하기 위해 흔히 사용하는 방법은 오차항의 길이 제곱을 최소로 하는 방법인데, 이를 최소자승법이라고 한다.
 기하학적으로 오차항의 길이를 최소로 하는 방법은 벡터 y를 열공간 C(X)에 투영시켰을 때의 a값을 얻는 거이며, 이때 투영된 그림자를 y^이라 하고 그 때의 a값을 a^이라고 한다면 

y^ = Py = X(XTX)-1XTy = Xa^   (1.3)

로 부터

a^ = (X­TX)-1XTy   (1.4)

라는 값이 얻어지고 이를 '최소자승추정량(Least Squares Estimator)'라고 한다.


[데이터 분석] 파이썬에서 소셜 데이터 수집과 분석

이 글은 정광윤님이 DB Guide.net에 연재한
개발자를 위한 파이썬 분석을 정리한 내용입니다.

---------------------------------------------------------------------------------------------------

 트위터에서 트윗되고 있는 데이터 중에서 파이썬, 자바스크립트, 루비(Ruby)의 인기도를 분석해 보자.

0. 준비하기

먼저 필요한 패키지들은 다음과 같다.

1. pandas
2. matplotlib
3. json
4. re
5. tweepy

여기서 3,4번은 이미 내장되어 있는 패키지이다. 1,2 번은 pip install을 사용해 설치하면 되기 때문에 tweepy 설치 방법만 알아 보겠다.

1. Twitter API key 획득하기

 Application Programming Interface의 약자인 API라는 것이 있다. 이 API 덕분에 우리가 데이터를 흔하게 접할 수 있고 쉽게 데이터를 획득 할 수 있다. API는 즉, 프로그래밍 언어로 어플리케이션에 접근할 수 있는 인터페이스이다.

 트위터로부터 데이터를 가져오기 위해서는 아래 4가지 정보가 필요하다.

1. API Key
2. API Secret
3. Access Token
4. Access Token Secret

 이 네가지 정보를 얻기 위해서는 트위터 계정이 있어야하고 계정에 본인의 핸드폰 번호도 등록되어 있어야 한다.

1. https://apps.twitter.com/에 접속한다.
2. 우측 상단의 'Create New App'을 클릭한다.
3. 양식들에 값들을 적당히 채운다.(이름, 설명, 웹사이트(아무거나 입력 가능)만 입력하면 된다.)

4. 'Create your Twitter application'을 클릭한다.
5. 'Keys and Access Tokens' 탭으로 이동하면 Consumer Key(API Key), Consumer Secret(API Secret)이 있다.
6. 그 아래를 보면 'Create my access token' 버튼이 있고 이를 클릭한다.
7. 'Access token'과 'Access token secret'이 생성된다.

2. Twitter API에 연결해 데이터 다운로드 받기

 트위터 API에 접근하기 위해 Tweepy 라이브러리를 이용할 것이다.

터미널에서 다음과 같이 입력해 설치!


설치를 하다보니 pip의 버전을 8.0.2로 업그레이드 하라는 문구가 나와 업데이트를 했더니 그 후 부터 pip 명령어가 작동을 안한다.... 이거 해결하는 방법 아시는 분은 댓글로 알려주세요 ㅜ

 그 다음 아래와 같은 소스를 작성해서 twitter.py로 저장!


 중간 부분인 ①에 선언한 StdOutListener라는 클래스는 수 많은 트윗들을 가져와 print하는 역할을 하는 클래스이다. 우리는 이 print된 트윗들을 텍스트 파일로 저장할 것이다. 이 클래스는 tweepy의 StreamListener라는 클래스를 상속 받고 on_data와 on_error라는 함수를 오버라이딩 한다.

 ② 부분에서는 위에서 선언한 StdOutListener 클래스를 통해 I라는 객체를 만들었다. Access Token을 설정한 이후 stream = Stream(auth,I)를 통해 현재 트위터에서 발새되고 있는 트윗의 스트리밍을 객체로 만든 것이다. 객체의 모든 트윗을 다 저장할 수는 없기 때문에 filter를 통해 우리가 알고자 하는 파이썬, 자바스크립트, 루비만 필터링해 가져오도록 했다. 이것을 다음과 같이 실행해 보자.


 이 작업은 현재 트위터의 트윗 스트리밍에서 python, javascript, ruby라는 텍스트가 들어 있는 트윗을 실시간으로 twitter_data.txt 파일에 해당 내용을 출력-저장하는 것이다. 따라서 이작업에는 시간이 걸리기 때문에 데이터가 수집된 후에 계속 쓰도록 하겠다.

2016년 1월 15일 금요일

[책 리뷰]인사이트 통찰의 힘

  내가 가장 관심을 갖고 공부하는 분야가 데이터 분석인데 분석 기술 보다 중요한것이 분석 결과를 보고 인사이트를 도출해 내는 것이라 들었다. 하지만 듣기만 했을 뿐 도대체 무엇을 어떻게 해야하는지 감이 잡히지 않았는데 책을 보면서 약간 알것 같기도 하다는 생각을 하게 되었다.
 혁신이나 뭐니 하는 말이 많이 나오는 요즘 시대는 새로움을 향한 열망이 많은 시대인 것 같다. 이 책은 그 혁신을 이루기 위해 가장 중요한 것을 공감으로 봤다. 통찰을 발견하기 위한 렌즈를 바로 공감으로 봤는데 문제를 정의한 다음 그것에 대해 소통하고 관찰하고 코드를 맞추며 확산 시킨다. 그 다음 이것들을 공감이라는 렌즈를 통해 통찰, 발상, 그리고 콘셉트 설정을 통해 그것들을 수렴시킨 다음 그것들을 실행하는 법에 대한 내용이 이 책의 핵심 내용이다.

 위의 여섯가지 내용을 살펴보자. 먼저, 코드가 있다. 코드는 사용자에 맞는 문화 코드로 전환하라는 내용이다. 아무리 혁신적이고 좋은 아이디어 일지라도 사용자들의 정서와 문화 코드 같은 것들과 맞지 않으면 그 아이디어는 사용자들로 부터 반응을 이끌어내기 힘들 것이다. 혁신이라는 것은 사용자에게 혁신적이어야지 내가 느끼기에 혁신적이어선 안되기 때문이다. 책의 저자는 코드를 맞추기 위해 프로젝트를 진행할 때마다 '사용자 되어보기' 방법을 사용 한다고 한다. '사용자 되어보기'를 하기 위해 사용자에 맞는 환경을 조성한다고 한다. 예를 들어 학교와 관련된 프로젝트를 진행할 경우 프로젝트 룸을 실제 교실처럼 조성하는 것이다. 급훈을 달고, 학급내에 있는 것과 비슷한 게시판, 책상, 의자 등을 구비해놓고 그곳에서 프로젝트를 진행하며 '사용자 처럼'이 아니라 '진짜 사용자'가 되어 보는 방법이다.

 그 다음은 관찰이다. 관찰은 익숨함 속에 숨겨진 새로운 기회를 발견하는 것을 말한다. 새로운 것을 발견하는 것이 아니라 새로운 눈으로 사물을 보는 것이라 생각하면 될 것 같다. 인사이트 헌팅을 하는 관찰자에게는 행동 유발의 동기가 무엇인가?(Motivation), 원래 용도와 다른 사용은 없는가?(Workaround), 문제나 불편한 점은 무엇인가?(Pain-point), 기존의 나의 생각과 다른 점은 무엇인가?(New Perspective) 이 네 가지 질문이 필요하다고 한다.
이러한 행동들을 통해 관찰을 하다보면 흥미로운 사실을 발견할 수 가 있는데 제 삼자가 봤을 때는 불편할 것 같은데 당사자들은 익숙해져서 그 불편함을 느끼지 못한다고 한다. 이러한 것들을 '익숙해진 불편함'이라고 한다. 이 '익숙해진 불편함'이 바로 혁신의 대상이라고 한다.

 통찰을 발견하는 세 번째 도구는 소통이다. 소통은 원초적 본능과 감성과 교감하는 것이라고 한다. 다양한 방식으로 사용자와 소통을 하는 이유는 사용자가 스스로 인지하지 못하는 미충족 니즈를 발견하기 위해서라고 한다. 그 미충족 니즈가 바로 비즈니스의 기회이다. 인간의 니즈는 네 가지로 정의 될 수 있다고 한다.
 미혼의 여성이 남성과 데이트를 하는 상황을 가정했을 때, '사랑받고 싶다 '와 같은 니즈를 일반적 니즈(common Needs)라 하며, '이상적인 남자를 만나고 싶다 '와 같은 니즈를 맥락적 니즈(Context Needs), '데이트를 하고싶다 ', '남자와 커피를 마시고 싶다 '와 같은 사람들이 특정한 상황에서 수행하고자 하는 행위적 니즈(Activity Needs), 마지막으로 '커피를 흘리지 않고 커피잔을 잡고 싶다 '와 같은 기능적 니즈(Qualifier Needs)로 구분된다고 한다. 그리고 비즈니스 적으로는 맥락적 니즈행위적 니즈초점을 맞추는 것이 좋다고 한다. 일반적인 니즈에 집중하면 제품이나 서비스의 차별성이 결여되기 쉽고, 기능적 니즈에 집중하다보면 경쟁 제품과의 충돌을 피할 수 없기 때문이다.
 사용자에 대한 통찰을 발견하기 위해서 인터뷰를 진행할 때의 노하우로 1. 사용자가 누구인지, 무엇을 알고 싶은지 충분히 연구한다. 2. 단답형이 아닌 오픈형 질문을 한다. 3.전체적인 경험을 묻는다. 와 같은 방법이 있다고 한다.

 이번에 다뤄볼 내용은 통찰이다. 통찰은 공감렌즈를 끼고 감춰진 인사이트를 낚는 것이다. 지금까지 알아 본 것은 사용자가 되어 코드를 맞추거나 관찰과 소통을 통해 새로운 사실을 발견하고 사용자와 공감하는 법에 대해 알아 보았다. 이 과정에서 통찰을 발견하기도 하지만 대부분은 전 단계에서 축적된 수많은 정보를 '분석하고 종합하는 수렴의 과정 '에서 통찰을 얻는 경우가 많다. 통찰을 찾는 방법 중 하나는 의미를 재해석하는 관점을 바꾸는 방법이 있다. 비즈니스 혁신을 위해 반드시 기술력이 필요하다는 생각에서 벗어나야 한다는 말이다. 새로운 관점에서 제품이나 서비스를 재해석하거나 기존과 전혀 다른 방식으로 사용자에게 가치를 전달하는 비즈니스 모델로도 시장 파괴적 혁신이 가능하다는 것을 의미한다. 이러한 관점의 전환을 이끌어 내는 공식이 있다. 그것은 '가만히 생각해 보면, OO은 OO이 아니라 OO이다.' 이다. OO는 각각 대상, 기존의 정의, 새로운 정의에 해당한다. 그리고 사소한 것이라도 어떤 인사이트가 떠올랐다면 그 순간 바로 그것을 기록해 놓아야 한다. 그러지 않으면 그 내용들이 대부분 머릿속에서 사라지고 말기 때문이다.
 아이디어를 다 모았으면 세 단계에 거쳐 인사이트를 뽑아내야 한다. 첫째, 개별 대상 정보의 분리와 색인 달기, 둘째, 정보의 의미 묶음 및 패턴 찾기, 셋째, 통합적 인사이트와 핵심 키워드 뽑기가 바로 그것이다. 이 과정을 거치면서 항상 '왜 그럴까?' 라는 질문을 하면 답을 찾기가 쉬울 것이다.

 그 다음으로는 발상이다. 발상은 말랑말랑한 아이디어로 상식을 뒤집는 것이라 한다. 앞의 과정을 통해 새로운 통찰을 얻었다면, 그 통찰에 근거한 창의적 해결책을 만들어야 한다. 창의적인 아이디어를 발상해내기 위해서는 기존의 틀에서 벗어나 자유로운 사고를 할 수 있어야 한다. 창의적인 아이디어를 위해서는 물리적 환경과 기확자나 디자이너의 마인드셋 그리고 실질적이고 효과적인 방법론 이 세가지가 필요하다고 한다. 그리고 긍정적인 질문을 하라고 한다. 그 질문법은 HMW라고 부른다. HMW(How might we ~?/ 어떻게 하면 그 니즈를 해결할 수 있을까?) 질문법은 경쟁자를 이기기 위한 'can'의 질문이 아니라 소비자를 만족시키고 많은 긍정적 가능성을 열어주는 'might'의 질문을 하는 것이다. can이나 should로 시작하는 질문은 판단의 의도를 내포하지만 might로 바꾸면 판단을 유보한다고 한다. 그리고 이질문에는 공급자의 니즈가아닌 사용자의 니즈를 담아야 하고 질문의 범위가 너무 넓지도 너무 좁지도 않게 만들어지도록 주의해야 한다고 한다.
 창의적 사고를 돕는 아이디어 발상 기법도 있다. 첫째, 이종 산업에서 아이디어의 영감을 구하는 불스아이, 둘째, 무작위 사물의 속성을 강제로 결합하는 랜덤링크, 셋째, 기능을 분리하여 처음부터 다시 그리는 언번들링, 넷째, 방사 사고로 생각을 확장하고 연결하는 마인드맵이 그것이다. 이러한 방식들을 통해 창의적인 아이디어를 도출해 내면 될 것이다.

 공감 디자인의 마지막 단계는 사용자 통찰에 기반한 콘셉트를 만들어 내는 것이다. 콘셉트는 상품을 하나로 꿰뚫어 사용자와 연결 시키는 것이라 보면 될것이다. 좋은 콘셉트에는 다섯 가지 속성이 있다고 한다. 첫째, 다른 것과 구분되는 독창성, 둘째, 누구나 쉽게 이해하도록 전달력을 높이는 구체성, 셋째, 불필요한 군더더기가 없는 단순성, 넷째, 돈을 주고 구입하고 싶은 가치성, 다섯째, 세상에 내놓을 수 있는 구현성이 바로 그것이다. 그리고 아무리 좋은 콘셉트를 잡아도 그것을 실행시키는 것은 다른 문제일 것이다. 이 콘셉트와 실행 사이의 깊은 협곡을 건너는 법으로는 첫째, 이해관계자를 콘셉트 개발에 참여시켜라, 둘째, 결과가 아닌 사용자 공감의 과정을 전달하라, 셋쨰, 경쟁 제품과 선도 제품을 스크리닝하라, 넷째, 작게 시작하여 신속하게 테스트하라가 있다.

 이상이 통찰과 창의성을 성취하는 법에 대한 이 책의 내용이다. 이 글을 작성하는데 시간이 꽤 걸렸다. 앞으로 다른 얘기를 쓰다보면 이거보다 더 오래 걸리겠지만. 이 글이 내가 넷상에 올려본 가장 긴 글이고 처음 써본 글이다. 처음 쓰다보니 이게 독서요약인지 그냥 책 내용 부분부분 긁어다 붙인건지 구분이 안되는 듯 하고 갈수록 힘들어져서 점점 대충 쓴 경향이 있지만 처음 써본 글이라는 것에 의의를 두고 싶다.

독서 요약을 시작하며

 책을 읽고 난 뒤 나중가면 그 책의 내용이 기억나지 않을 때가 많다. 그리고 기억을 못하는데 읽어봤자 무슨 소용일까 싶은 생각도 많이 해봤다.
책을 읽고 정리, 요약을 해놓으면 좀 더 기억이 오래가지 않을까 싶어 시작하는 독서요약(혹은 독후감).

T-Robotics : Robot & Math: 추천! 로봇공학 / 기계학습 무료 교재(pdf) 15가지

T-Robotics : Robot & Math: 추천! 로봇공학 / 기계학습 무료 교재(pdf) 15가지

Terry.t.um님 블로그에서 가져온 무료 교재들 천천히 봐야지..