2014년 4월 30일 수요일

[Linux] CentOS 6.5 - Samba Server Configuration

* Samba는 주로 윈도우즈 사용자와 함께 파일서버 형태로 구성하는 경우 많이 사용을 하게 된다. 팀내 공유문서 및 파일 구성을 위해서 7년만에 CentOS를 접하면서 새로 설정 하는 것들을 찾다가 이것 저것 함께 정리 하게 되었다.

원문주소
" Easy Samba server installation on CentOS 6.5 " 

Samba is a client/server system that implements network resource sharing for Linux and other UNIX computers. With Samba, UNIX files and printers can be shared with Windows clients and vice versa. Samba supports the Session Message Block (SMB) protocol. Nearly all Windows computers include SMB support with their internal network subsystems (NetBIOS in particular).

With an appropriately-configured Samba server on Linux, Windows clients can map drives to the Linux filesystems. Likewise, the Samba client on UNIX can connect to Windows shares by their UNC name. Although differences among various operating systems (such as filesystem naming conventions, end-of-line conventions, and authentication) can limit interoperability, Samba offers a generally serviceable mechanism for resource sharing on a heterogenous network.


* 설치를 위해서 체크 및 버전을 확인 한다.

1. [root@orabackup ~]# yum install samba samba-client samba-common

2. [root@orabackup ~]# smbd --version



* 서비스를 자동으로 올려주기 위해서 아래의 문장을 처리 한다. 그러나 보통 한글판 CentOS6.5 버전을 설치 할때 보통의 특별한 체크를 하지 않았다면 "Basic Server" 버전 이상의 설치 체크에선 이미 등록되어 있다. 다만 자동 시작의 레벨 체크가 되어 있지 않으므로 그부분에 대한 설정 변경만 한다면 자동 실행을 큰 무리 없을 것이다.

여하튼 그것이 있든 없든 사용할 수 있는 구문 임

1. [root@orabackup ~]# chkconfig smb on
2. [root@orabackup ~]# chkconfig nmb on


* 방화벽 설정이 보통은 열려 있지 않으므로 방화벽 설정

1. [root@orabackup ~]# iptables -I INPUT 4 -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
2. [root@orabackup ~]# iptables -I INPUT 5 -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
3. [root@orabackup ~]# iptables -I INPUT 6 -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
4. [root@orabackup ~]# service iptables save

또는 설정파일을 직접 열어서 VI로 수정하여 서비스를 재시작 하여도 동일한 결과를 얻을 수 있다.



1. [root@orabackup ~]# vi /etc/sysconfig/iptables

* 아래내용 추가
-A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT

2. [root@orabackup ~]# service iptables restart


3. [root@orabackup ~]# cat /etc/sysconfig/iptables



* 윈도우에서 네트워크 드라이브로 접속(인증)할 사용자/그룹 정보와 폴더를 생성한다.

1. [root@orabackup ~]# useradd its
2. [root@orabackup ~]# groupadd smbgrp
3. [root@orabackup ~]# usermod -a -G smbgrp its
4. [root@orabackup ~]# smbpasswd -a its
5. [root@orabackup ~]# cd /home/its
6. [root@orabackup ~]# mkdir its_files
7. [root@orabackup ~]# chown -R its:smbgrp its_files/
8. [root@orabackup ~]# chmod -R 0770 its_files/


* Samba 설정 파일을 아래와 같이 변경하여 마무리 한다.



* 마무리한 서비스를 재시작 한다.

1. [root@orabackup ~]# service smb restart
2. [root@orabackup ~]# service nmb restart


* 네트워크 드라이브 연결은 윈도우에 처리 하며 별도의 설명을 붙이지 않겠음

1. \\서버해당아이피\its_files
2. 상위에서 만든 아이디/패스워드로 접속하여 연결 완료



2014년 4월 18일 금요일

[Linux] vi command - 주요명령어 메모

1. 시작과 종료에 관련된 명령어
명령어 입력 상태에서 입력해야 합 [Shift + :]
wq 저장하고 종료
w [filename] 주어진 파일 이름으로 저장
w! [filename] 주어진 파일 이름으로 저장/덮어쓰기 후 종료
w! 저장후 편집종료
q 저장하지 않고 종료
q! 저장하지 않고 강제종료
e 종료하지 않고 다른 파일 편집
e! 편집한 내용 저장하지 않고 최종 저장된 상태로 파일 열기


2. 입력과 수정을 할 때 사용하는 명령어
i 문자 앞에서부터 입력
a 현재 문자 뒤에서부터 입력
o 현재라인 아래에 입력
s 커서가 있는 단어를 지우고 입력하기
S 커서가 있는 행을 지우고 입력하기
cw 커서 위치의 한 단어를 수정하기
co 커서 위치부터 줄의 처음까지 수정하기
c 커서 위치부터 줄의 끝까지 수정하기
cc 커서가 있는 줄을 수정하기
cj 커서가 있는 줄과 그 다음 줄을 수정하기


3. 삭제할 때 명령어
dw 한 단어 삭제
dd 한 라인 삭제
dj 커서가 있는 줄과 그 다음 줄을 삭제
dk 커서가 있는 줄과 그 앞줄을 삭제
do 커서 위치부터 줄의 처음까지 삭제
x 커서의치의 글자 삭제
D 한줄삭제
X 커서 바로 앞의 글자 삭제

4. 복사할 때 명령어
y 문자 복사
yy 한라인 복사
yw 커서 위치부터 단어의 끝까지 복사하기
yj 커서가 있는 줄과 그 다음줄을 복사하기
yo 커서 위치부터 줄의 처음까지 복사하기
yk 커서가 있는 줄과 그 앞줄을 복사하기
y$ 커서 위치부터 줄의 끝까지 복사하기
p 현재 줄 다음에 버퍼의 내용을 붙임
P 현재 줄 앞에 버퍼의 내용을 붙임

2014년 4월 17일 목요일

[Using R] Sentiment Analysis Sample Source

# 아래 내용은 이전 포스팅인
트위터 글(데이터) 수집하기 에서 만들어진것이 R실행 코드에서 연결되어야 실행 가능 합니다.

install.packages("plyr")
library(plyr)

hilton.text <-laply(hilton.tweets,function(t)t$getText())
head(hilton.text,3)

#긍정 단어 파일 스캔
pos.word=scan("positive-words.txt",what="character",comment.char=";")

#부정 단어 파일 스캔
neg.word=scan("negative-words.txt",what="character",comment.char=";")

#수작업으로 추가 할수도 있음 (Sample)
pos.words<-c(pos.word,"upgrade")
neg.words<-c(neg.word,"wtf","wait","waiting","epicfail","mechanical")


#
install.packages("plyr")
install.packages("stringr")
library(plyr)
library(stringr)

score.sentiment =
function(sentences, pos.words, neg.words, .progress='none')
{
  require(plyr)
  require(stringr)

  # we got a vector of sentences. plyr will handle a list
  # or a vector as an "l" for us
  # we want a simple array ("a") of scores back, so we use
  # "l" + "a" + "ply" = "laply":
  scores = laply(sentences, function(sentence, pos.words, neg.words) {
 
    # clean up sentences with R's regex-driven global substitute, gsub():
    sentence = gsub('[[:punct:]]', '', sentence)
    sentence = gsub('[[:cntrl:]]', '', sentence)
    sentence = gsub('\\d+', '', sentence)

    # and convert to lower case:
    sentence = tolower(sentence)
 
    # split into words. str_split is in the stringr package
    word.list = str_split(sentence, '\\s+')

    # sometimes a list() is one level of hierarchy too much
    words = unlist(word.list)
 
    # compare our words to the dictionaries of positive & negative terms
    pos.matches = match(words, pos.words)
    neg.matches = match(words, neg.words)
 
    # match() returns the position of the matched term or NA
    # we just want a TRUE/FALSE:
    pos.matches = !is.na(pos.matches)
    neg.matches = !is.na(neg.matches)
 
    # and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum():
    score = sum(pos.matches) - sum(neg.matches)
 
    return(score)
  }, pos.words, neg.words, .progress=.progress )

  scores.df = data.frame(score=scores, text=sentences)
  return(scores.df)
}

#함수 실행
hilton.text<-hilton.text[!Encoding(hilton.text)=="UTF-8"]
hilton.scores=score.sentiment(hilton.text,pos.words,neg.words,.progress='text')

#실행결과 값을 히스토그램으로 표현
hist(hilton.scores$score)
hilton.scores$hotel='Hilton'
hilton.scores$code='HL'


[Using R] R을 사용하여 트위터 데이터 수집하기 - Twitter Oauth for R

트위터에 대한 데이터를 기준으로 간단한 감성분석 샘플을 만들어 보자. 참고된 스크립트는 데이터베이스 진흥원 빅데이터 아카데미에서 사용한 샘플 소스 임을 밝힌다. 트위터에 있는 글을 수집하기 위해서는 어플리케이션을 하나 임시로 만들어서 데이터 가져오기 위한 준비를 몇가지 해야 한다. 샘플은 영문으로 된 것을 기준으로 하며 한글로 된 데이터를 가져오는 부분은 추가로 포스팅에 업데이트 될 예정이다. 크게 다리지는 않지만 몇가지 작업들이 추가 된다.

1. twitter 계정 만들기 ( 별도 계정 생성은 설명을 붙이지 않는다 )

2. twitter에 접속 한 후 application 생성이 필요

    https://apps.twitter.com/ 접속 후 로그인


3. "Create New App" 클릭 




"Create your Twitter application" Click 

## 2016년 3월 - 기존 트위터 계정에서 모바일 번호 인증이 되어 있지 않으면 하지 못하도록 변경된 것 같다. 결국에 또 정보 제공 해주고 나서야 다시 가능 
그래서 첨부된 이미지에 이름이 달라졌습니다. " ozzang98_RTest " 로 등록 


4. 생성된 Application 정보를 참고하여 R 스크립트에 적용 한다. 


 * 최근에 Access Token 버튼이 추가 되어 Create New Access Token 을 추가 하여야 한다. 추가 하고 나면 아래의 그림과 같이 활성화가 된다. 

5. 설정이 끝나고 나면 이 정보를 가지고 R 에서 스크립트를 실행한다. 

* 실행환경 윈도우7 64비트, R 3.2.0, RStudio 0.98.1103 

# 기본적인 패키지 설치를 위한 구문 
install.packages("twitteR")
library(twitteR)
library(ROAuth)
library(RCurl)

#트위터 접근을 위한 정보 설정을 아래와 같이 함 
requestURL= "https://api.twitter.com/oauth/request_token"
accessURL= "https://api.twitter.com/oauth/access_token"
authURL ="https://api.twitter.com/oauth/authorize"


#상위의 4번 첨부 그림안에 있는 API KEY (본인의 설정에 따라 값이 다름) 
consumerKey="izSShtegtepjWqL1dTWZPg"  

#상위의 4번 첨부 그림안에 있는 API secret 값 
consumerSecret="u03nOZBzqsLrPEVWM2iFbCbDAkbrixPLsTpzZ1MQQ4"


twitCred=OAuthFactory$new(consumerKey=consumerKey,
                                          consumerSecret=consumerSecret, 
                                          requestURL=requestURL, 
                                          accessURL=accessURL, authURL=authURL)

#저장위치 수동지정(기본 Workspace 위치) 
setwd("C:/Users/John/Downloads")
download.file(url="http://curl.haxx.se/ca/cacert.pem",destfile="cacert.pem")
twitCred$handshake(cainfo="cacert.pem")

#이 단계에서 콘솔에 출력되는 URL을 입력하고 어플리케이션 승인을 해야 한다. 


# [그림 참조] PIN 번호 입력을 하고 나면 그 다음 스크립트를 실행 가능 함 


## 입력은 Console 창에서 입력하기 바란다. 

##save(list="twitCred",file="twitteR_credentials")
##load("twitteR_credentials")

registerTwitterOAuth(twitCred) #True 인증 완료 




## 2016년 3월 25일 추가 변경 
## 인증 방법 및 적용이 변경된 것 같으나 정확한 사유는 확인 하지 못했습니다. 
하여 혹시 관련 내용을 적용하시고자 하신다면 하단 내용으로 진행하시길 권장 합니다. 
#install.packages("twitterR")
#install.packages("ROAuth")
#install.packages("base64enc")
library(twitteR)
library(ROAuth)
library(base64enc)

consumer_key <- '3esVC69GlJcmxL4VezZ7CdKwu'
consumer_secret <- 'gwtwk1oMqQvi6ZfqPphQb9uJctCDIIldGxYymU9OcCAJDbkouQ'
access_token <- '133360027-x7e4FuoCVA4AsEFBMjhs4kvx3HN86ajsRQmG7mwJ'
access_secret <- 'ak2qVw9ioIXyLmUw1UqWHNHohJRRPfWzlDtABaHRYzJIr'

setup_twitter_oauth(consumer_key,consumer_secret,access_token,access_secret)


# 트위터글을 검색하여 트윗정보를 가져온다 
hilton.tweets <- searchTwitter("@hilton",n=50,cainfo="cacert.pem")

length(hilton.tweets)
class(hilton.tweets)
hilton.tweets[1:5]
tweet<-hilton.tweets[[1]]
tweet$getScreenName()
tweet$getText()

twitteR 패키지에 대한 메뉴얼을 하단의 링크를 참조 하시길 바랍니다. 



2014년 4월 15일 화요일

[Info] Sync Google Calendar with Outlook 2010 and 2013

Sync Google Calendar with Outlook 2010 and 2013 

참조 - 원문 링크 


기존에 구글 계정을 가지고 일정을 사용하시던 분들이라면 Outlook 2013에서 간단한 설정으로 일정을 함께 공유할 수 있습니다.

1. 구글 계정으로 로그인 하여 [켈린더] 일정으로 이동 합니다.

2. 켈린더에 대한 아래 그림과 같이 클릭하면 [설정] 메뉴를 클릭 합니다.


3. 설정화면에서 아웃룻과 연동하고자 하는 일정을 클릭하면 상세 정보가 나옵니다.


위 그림에서 비공개주소 ICAL (녹색바탕의 버튼 글씨)를 클릭하시면 URL 주소가 나타납니다. 이 해당 주소를 복사 합니다.

4. 아웃룩2013을 실행 합니다. 일정으로 들어가 아래 버튼처럼 [일정] --> [일정열기] 를 클릭하여 3번에서 복사한 URL 주소를 붙여넣기 합니다.



5. 여기까지 마무리 하고 나면 왼쪽에 [내일정] -> 일정, [다른 일정] -> [구글일정] 이 추가 된것을 확인 할 수 있다. 


* 모바일에 일정을 공유하실 때는 구글일정 또는 포털 일정으로 연결 하시면 편리 합니다. 감사합니다.





[SAF Intranet] 데이터의 재발견

* SAF internal training courses - data analysis process #1

이것은 사내 임직원 내부 교육을 위해 생성된 자료를 바탕으로 하고 있습니다. 사내 실습용 데이터는 별도로 내부에서만 공유될 예정이며 이 글은 사내 과정의 참고자료 목적으로 작성된 내용입니다. 

다음과 같은 교육과정으로 구성  
1. 일반 - 왜 모두들 데이터에 관심을 갖는가에 대한 내용
2. 기초 - 내부/외부 데이터 수집 방법, 데이터 가공 방법  
3. 분석 - 간략한 분석방법 실습 적용 
4. 표현 - 데이터 시각화에 대한 이야기, 보고서 만들기

활용도구는 오픈소스 R과 Excel을 병행 하도록 합니다.
관련된 자료는 구글 검색 또는 내부 커뮤니티 게시판을 이용하세요. 

* 이야기를 시작하며
처음 과정을 만들어 보고자 할때 부터 고민이 되는 것은 어떻게 이야기를 전개 해야 하는가에서 부터 최종 교육을 통한 목적이 무엇인가에 대한 고민이 가장 컸습니다. 결론 적으로 우리는 그 첫번째 목표로 데이터를 바라보는 관점의 변화 두번째로 데이터(주로 내부 그리고 외부 포함)가 주어졌을 때 분석하고자 하는 형태로 데이터를 변환하고 도구를 이용하여 여러가지 형태로 분석할 수 있도록 지원 하는 것으로 가져 봤습니다.

물론 4차 과정에서 데이터 시각화에 대한 과정을 추가 하였으나 표현에 대한 기법이라기 보다는 시각화가 가져다 주는 장/단점을 확인해보고 향후 좋은 보고서를 만드는 방법은 무엇인가에 대한 토론이 주된 내용이 될것입니다.

우리의 이 이야기는 해당 분야에 대한 아주 아주 대단한 전문가 집단이 아닙니다. 어쩌면 보잘것 없는 위치 일 것입니다. 하지만 우리의 이 시작이 우리의 개인과 조직을 더 스마트하게 한다는 우리의 비전을 실현해줄 것이라고 상상하고 달려 갈 것입니다. 내용에 오류가 있거나 논란이 될 수 있는 부분은 덧글 또는 메세지를 통하여 전달 해주시면 정정 하도록 하겠습니다.


* 패턴? 당신은 누구 입니까? 

보통의 개념을 우리가 알기 위해선 과거 책(또는 사전)을 찾아 보거나 했을 것이지만 최근엔 대부분 검색을 하게 될것입니다. 구글을 사용하시나요? 목적이 검색이라면 구글을 추천합니다. 그 이유는 여기의 논재가 아니니 제외하도록 할께요. 위키피디아에 나온 정의는 이렇습니다. 패턴(pattern)은 프랑스어 낱말 patron에서 온 것으로, 되풀이되는 사건이나 물체의 형태를 가리킨다. 물체들의 집합 요소로 부르기도 한다. 이러한 요소들은 예측 가능한 방식으로 되풀이된다.쪽매맞춤(테셀리이션-tessellation)이라는 가장 기본적인 패턴은 반복과 주기성에 기반을 둔다.

제가 생각하기에 가장 적절하게 하는 표현이 정의 그 자체에 있는듯 합니다. 예측 가능한 방식으로 되풀이 된다는 것입니다. 고객을 대상으로 하는 조직이라면 더더욱이 고객을 예측하고 싶어 합니다. 언제 구매를 하게 될지에 대한 논의는 소비패턴이나 행동패턴등의 용어에 포함되어 과거에서 부터 많은 논의가 되어 왔어 많는 논문들에서도 어떠한 프로세스 과정을 거쳐 구매하게 되는지도 정의한 결과들이 참으로 많습니다. 우리의 주제는 아주 상세하게 그 내용을 논의 하고자 하는 것은 아닙니다. 왜? 라는 곳에만 집중을 해보도록 할께요.

분명 우리는 이미 과거의 구매가 되풀이 되는 기록을 통하여 앞으로의 구매가 일어날 것을 예측할 수 있습니다. 이미 우리는 그렇게 하고 있지요? 과거 이벤트나 과거 행사 를 해봤으니 올해도 이렇게 될 것이다. 그럼 한가지 궁금한게 있습니다. 그러한 근거 또는 가설을 뒷받침 할 만한 내용을 데이터로 갖고 있는지 아니면 경험으로 갖고 있는지 말입니다. 이미 데이터로 그 가설을 뒷받침 하고 계시다면 더이상의 조언은 의미가 없을 것입니다. 그렇지만 경험으로만 갖고 계신 의사결정이라면 반드시 틀렸다고 만은 말할 수 없으나 데이터를 기반으로 하는 의사결정과 가설의 뒷받침을 할 수 있길 권고 하려고 합니다.

그래서 우리는 오늘 그 데이터에 대한 이야기를 좀더 해보고자 합니다.

* 데이터 자체에 대한 이야기
데이터베이스에 대한 공부를 하신 분들이 만약에 계시다면 대부분의 첫장에 설명되어 있는 데이터에 대한 설명은 데이터와 정보의 차이를 구분하여 설명하는 것이 일반적일 것입니다. 저 또한 그와 틀리지 않은 이야기로 시작하려고 합니다.

우리의 모든 현상 다시 말해 현실세계에는 모두 데이터로 표현 가능 합니다. 데이터는 크게 정성적데이터와 정량적 데이터로 구분을 합니다. 정성적 데이터특성이나 특징을 나타내는 기호나 문자를 대표합니다. 또한 숫자로 표현할 수 있는 데이터들을 정량적 데이터라고 합니다. 정의에 대한 이야기가 나왔으니 정보나 지식에 대한 이야기도 해보겠습니다. 무수히 많은 데이터들은 데이터 자체로만은 의미가 없었습니다(과거형으로 표현하는 이유는 뒤에서 자연스럽게 이해가 되시리라 생각이 됩니다). 의사결정을 위해서 사용한 데이터들을 다르게 표현하여 우리는 정보(Information) 이라고 합니다. 또한 이러한 정보들은 유기적인 구조로 분리하고 개인의 경험을 보태어 축척하는 것을 지식이라고 합니다. 이러한 지식의 축척과 아이디어가 결합된 창의적 산물을 지혜로 설명할 수 있습니다. (참조-데이터분석전문가가이드)




위그림은 지식의 피라미드에 사례를 우리가 보기 편한 사례로 좀더 수정을 해봤습니다. 좀 억지스러운 예제일 수 있으나 구분하는 목적으로만 바라 봐 주시길 바랍니다. 누구나 위의 지식피라미드를 경험하리라고 봅니다. 살면서 경험하게 되는 많은 것들은 이 일련의 프로세스같은 경우가 많이 있기 때문이죠. 그런데 최근에(개인적으론 이런 저런 언급이 시작된건 4년 전 인것 같네요 - 이미 그전이라고 하더라도 지극히 개인적인 수준입니다) 상위 레벨의 지혜까지의 일련의 프로세스가 아닌 데이터 자체에 대한 관심이 높아 지고 있습니다. 왜 일까요?

주변의 활용 사례와 사용 사례들을 보면 그 이유가 조금은 이해가 됩니다. 그것은 바로 데이터 자체가 나타내고 있는 패턴입니다. 무수히 많은 그리고 무심코 지나치던 데이터 들은 통찰력과 새로운 시각으로 바라 보니 어떤 특징들을 가지고 있다는 것입니다. 과거에 비해서 우리는 데이터를 수집하고 저장하고 검색하고 분석하는데 드는 비용이 현저히 떨어지고 있습니다. 하여 이러한 궁금증과 실행이 좀더 쉬워지고 좀더 간편해졌다고 생각이 듭니다. 지금보다 앞으로는 이러한 것들의 더 좋은 인프라가 구성이 되리라 생각이 듭니다.


* 데이터를 활용한 국내 해외 사례
주변에서 전문가의 교육이나 세미나 등에서 자주 등장하는 이야기가 있습니다. 바로 기저귀 맥주의 사례인데요. 금요일 저녁에 기저귀를 사는 남자들이 맥주를 산다라고 하는 데이터 구매 이력을 보고 상품 진열을 함께 했더니 매출이 상승하였다. 과거에 데이터 분석의 주요 의미는 인과관계를 분석하는데 관점이 컸다면 이와 같이 인과관계를 설명할 수 없지만 어떤 상관성을 가지고 있는 것들을 찾아 냄으로 해서 그 다음 행동을 할 수 있게 의사결정 하는 것이죠. 이보다 국내에서도 다양한 사례들이 생겨나고 있습니다. KT와 서울시의 협업으로 생성된 심야교통버스의 노선을 분석한 사례등도 이와 같다고 할 수 있죠. 다양한 사례와 내용은 지면을 통하지 않고 아래 링크의 여러 보고서 자료가 존재 하니 참고 하시길 바랍니다.




- 빅데이터 국가전략 포럼 사례보고서


* 왜 다들 데이터에 집중 할까?
결국에 이러한 데이터를 가지고 숨겨져 있던 패턴을 찾아 내고 그 패턴을 기억하고 그 패턴에 맞는 예측된 내역을 사람에게 전달 합니다. 또는 공공의 문제를 해결하는데도 사용되죠. 결국에 그 방향은 정부의 정책에도 변화를 이끌어 내리라고 봅니다. 그것은 공통적인 적용에서 바로 개인적인 적용의 시대로 변화하고 있다는 의미 일 수 있습니다. 넓게 보지 않고 우리는 기업이니 기업의 관점에서만 한번 바라 보겠습니다. 우리는 현재 개인화 서비스까지 할 수 있는 인프라를 구성하진 않았습니다. 하지만 꿈같은 현실이지만 많은 고객을 개개인별로 응대하고 그의 성향을 알 수 있고 본인에게 딱맞는 맞춤형 서비스가 진행 된다면 좀더 좋지 않을까요? (물론 개인정보보 보호에 관한 사항이 얽혀 있긴 합니다만 이곳에서는 그 부분은 언급하지 않겠습니다. 그/그녀가 누구인지에 집중하는 것이 아니라 어떤 특성을 갖고 있는지에 대한 이야기를 하고 있으니까요)

개인화서비스가 좀더 알고 싶으신 분은 링크를 참조 하세요. (개인화서비스)
- 블러그 설명 자료 링크
- 뉴스기사


* 일반과정을 마무리 하며
글을 쓰다 보니 배가 산으로 간 느낌이 없지 않아 있습니다. 우리가 데이터에 관심을 갖는 이유는 결론이 개인화 서비스는 아닙니다. 여러가지 형태로 발전하고 변화 한것을 언급하다 보니 그 이야기 까지 하게 되었네요. 정신 차리고 다시 제자리에 서서 생각해보도록 하겠습니다. 우리는 과거 많은 의사결정을 또는 의사결정을 위한 사전 준비를 데이터를 기반으로 하지 않았습니다. 물론 데이터를 기반으로 했다고 주장할 순 있지만 좀 아쉬운 것은 데이터 기반에 포함되는 데이터가 현재의 데이터와 상관관계를 갖는 데이터가 제외 되지 않았는지 한번은 의심의 눈초리를 스스로에게 또는 조직에게 보내야 합니다. 또한 데이터를 기반으로 의사 결정을 한다는 것은 많은 것들을 내포하고 있지만 가장 큰것은 투명해진다는 특성을 가지고 있습니다. 부끄러움을 상징하는 투명함이 아니라 당당함과 견고함의 투명성을 갖는 개인과 조직문화를 만들어 가고자 우리는 이렇게 한발을 내딛은 것입니다.

사설이 길고 우왕좌왕한 설명들이 있었다는 것을 인정합니다. 하지만 시작을 했다는 것에 지금은 의미를 두고 싶습니다. 계속 변화 해갈 것이고 내부적으로 이러한 의사결정의 모델들을 만들어 보고 실행하고 검증하는 과정을 보낸다면 우리는 꿈같은 현실을 살아 갈 수 있을 것으로 확신합니다.







2014년 4월 3일 목요일

[Private Story] Start My Story - #1

문득 SNS(트위터, 페이스북, 카카오스토리 등)을 사용하면서 회의감을 느끼게 된건 그리 오래 되지 않았다. 어떠한 이유인지 모르겠으나 남들의 이유도 아닌 오로지 나 자신의 이유에서 그만 사용하는 것이 좋겠다는 생각이 문들 들게 되어 잠시 활동을 멈추고 뒤돌아 보는 시간을 갖기 위해 정리를 하다 보니 내가 왜 지금의 생각과 마음을 갖게 되었는지 뒤돌아 보는 것이 의미가 있겠다는 생각을 가지고 나에 대해서 뒤돌아 보는 작업을 하고자 한다.

누구에게나 공개적인 블러그에 글을 올리는 이유는 나 자신을 거짓없이 알아 가는 과정도 있지만 나와 비슷한 길을 것고 있는 분야의 사람들 또는 후배들과 함께 더 나은 모습으로 성장하기 위한 조언은 무엇인지 찾아 볼수 있는 기회는 아닐까도 생각해 본다.

오늘그 첫 발걸음으로 내 삶의 점들을 일단 한번 찍어 보기로 했다. 이 점들은 중간 중간 기억되는 것을 되집어 살아 날수도 또 사라 질수도 있음을 사전에 알린다.


내 머리속과 가슴속에 남은 나의 점들...

* 남달랐던 유년 시절
* 9급 공무원을 준비하다.
* 새로운 사람들과 프로그래밍을 만나다
* 밤샘과 삽질을 경험하기 시작하다.
* 취업과 진학 선택의 기로에 서다.
* 길을 잃고 혼돈의 세계를 경험하다.
* 내가 만든 최초의 정식 서비스를 오픈하다. .
* 이론으로만 배우던 ERP개발 작업에 투입된다.
* ERP 도입과 개발은 기술보다 중요한 사람과의 관계에 있었다.
* ERP 개발은 나에게 끊임없이 공부하라 말했다.
* 새로운 도메인을 경험하기 위해 떠나다.
* 이직(?)의 쓴맛을 보다. ( = 착각을 이해하게 된다.)
* 평생을 함께할 사람을 만나다.
* 이론으로만 있던 CRM을 만나다.
* 새로운 도전을 하게 되다 (나눔활동)
* 데이터를 요구하는 마케터에게 의문이 들기 시작하다.
* Back-end 에서 Front-end 로 나아 가라.
* 실패는 있어도 포기는 하지 않는다.
* 다양한 관점은 나를 성장시킬 것이다.

이어질 이야기들은 삶을 살면서 정답도 또 그리고 누군가의 이야기가 아니다 오로지 나에 대한 이야기다. 훗날 어린 아들이 함께 봐주었으면 하는 그 기록도 언젠가 포함되고자 한다. 그렇게 나는 준비 해본다.

2014년 4월 1일 화요일

[Data Science] 예측모델링(Predictive Modeling) & 분류(Classification)


지나서 얘기지만 교육을 받을 때는 정말이지 엄청히나 이해가 안되고 감이 안잡혔던 부분이었다. 물론 어떤 경우에 사용되는가? 사례등을 들어 보면 참으로 이해가 잘된다. 그런데 막상 하려면 참 어렵다. 이것이 진실이었던 듯 자꾸 수박 겉할기 식으로만 접근 해서 그런것은 아니었나 싶다. 최근에 "Data Science for Business" 이 책을 통해서 조금이나마 이해를 하기 시작했다. 결론은 기초가 없다는것 그 시작 그리고 과정을 정리 하면서 공부하려고 한다. CRM 데이터를 기준으로 설명하고 예제 실행(with R)을 해보려고 한다.

Predictive Modeling (예측모델링) - 흥미있는 특정 값에 따라 집단을 분류하는 것 으로 설명 한다.

예를들어 보자
1) 어떤 고객이 화이트데이 이벤트에 참여/구매할 것인가?
2) 어떤 고객이 3개월이내에 탈퇴 할 것인가?
3) 어떤 고객이 내년에 VIP가 될것인가?

이러한 용도에 고객의 행동을 예측하거나 고객들의 특성(속성)을 파악하는데 사용되고 다른 마이닝된 결과(메뉴들 과의 관계분석 이나 고객의 주요 구매활동 지역정보 분석에 대한 결과)와 연계하여 활용도 가능 하다.ㅍ

용어정의 먼저 시작하고 넘어 가보려고 한다.
Model - 알려지지 않은 값을 예측하기 우한 공식
Example, Attribute, Target Attribute


Class - 다른 Target Attribute 값을 갖는 Example 들의 Group

데이터베이스개론쪽 IT수업에서 보면 테이블 형태와 유사하다. 아니 똑같다라는 표현이 맞을듯 하다 여기서 구분되어져서 봐야 할 부분 바로 Target Attribute 로 되어 있는 부분 이다.

예제로 사용되는 IRIS 데이터셋이 있는데 Petal(꽃잎), Sepal(꽃받침)의 길이와 넓이 정보를 가지고 붓꽃의 품종 3종으로 나누어진 데이터가 있다. 모델을 만들때 그러니깐 분류분석을 할때 가장 어려워 했던 부분이 바로 Attribute와 Target Attribute에 대한 명확한 구분과 의미를 몰랐던것 같다. 이제와 보니 간단하면서도 명확했던 것을 무엇이 문제 였을까.

여하튼 특정속성값들을 어떻게 조합하여 모델을 민드냐에 따라 그 예측되는 결과가 달라 질 수 있음이다. 또한 한번 만들어 보고 나니 실제로 활용되는 모델은 다양하고 계속적으로 변화 하면서 존재 할 수 밖에 없다는 생각을 하게 되었다.


** 이부분을 먼저 할까 나중에 할까 하는 고민을 하게 된다. 개인적으론 나중에 했다. 그제서야 아.. 분류할때 이런 기준으로 분류는 하는거였구나 하며 무릎을 치게된 순간이 좀 늦게 왔다랄까? 어느게 먼저이어야 한다는건 사실 현업의 실무자에겐 의미가 없어 보인다. 학문적으로나 학구적으로 한다면 당연히 이부분이 먼저여야 한다는것이 맞겠지만 글쎄 개인적인 생각으론 우선순위가 있다기 보단 기본 지식이 있는것과 없는것의 차이? 여하튼 이곳에서의 기록도 또한 개인적 우선순위로 변경하여 먼저 정리를 하고 넘어갈 생각이다.

* Informative Attributes (유의한 변수(속성)) 를 찾아 내야 한다. 그래야 제대로된 분류를 할 수 있다. 예를 3개월 안에 이탈할 고객은? 이라는 문제가 있고 이탈하지 않도록 뭔가 강한 오퍼를 날리기 위해 이벤트든 켐페인을 해야 한다고 상황이 왔을때 우리는 제대로된 집단으로 분류하고 정리해야 한다. 이때 유의한 변수(속성)을 찾아 내는 것이다.

고객의 정보에 있는 여러가지 변수들 중에 말이다. 남자/여자? 최근 구매금액? 최근 방문빈도? 여하튼 여러가지 속성정보들 중에서 어떤 속성으로 아니 더 정확히 말하면 어떤 속성을 우선순위로 하여 분류할 것인가를 생각해야 한다. 이때 가장 많이 쓰이는 것이 바로 information gain이 가장 널리 쓰인다. Information Gain은 지정된 속성이 얼마나 잘 training example들간을 구분하는가에 대한 수치 값을 의미한다. 특정 속성을 기준으로 example들을 구분하게될 때, '감소되는 entropy의 양'을 의미한다. Entropy는 또 무엇인가? 그것은  example들의 집합에서의 혼합성(impurity)을 나타내는 수치 이다. 계산하는 로직은 아래와 같다.

* pi = 속성값이 i 일 확률

이렇게만 들으면 정말이지 맨붕 온다. 나 역시도 학부시절 통계학을 듣긴 했지만 정말이지 아주 아주 기초수준을 벗어나진 못했다.. 일단 그림 한번 보자


설명을 붙이기 전에 일반 그림으로 보면 +, - 를 구분하는데 있어 왼쪽 entropy값의 변화를 보자 값이 1과 0 사이에서 어느쪽이 순수하게 구분이 되어지고 어느쪽이 복잡하게 되어지는지 변화를 보자. 0에 가까울 수록 순수함을 표기하고 1에 가까울 수록 동일한 숫자로 혼합되어 있다는것을 확인 할 수 있다.




앞에서 Information gain이란 특정 속성을 기준으로 example들을 구분하게될 때 감소되는 entropy의 양을 의미한다고 하였다. 그리고 entropy는 example들의 집합에서의 혼합성(impurity)을 나타낸다고 하였으므로, entropy가 작아질수록 혼합성이 줄어든다. example을 구분할때 혼합성이 작을 수록 서로간의 구분이 더욱 용이해 지므로, Information gain이 커질수록 좋은것이다. 따라서 Information gain이 더 큰, '습도' 속성을 기준으로 운동여부를 구분하는 것이 더욱 효율적이다




#참고문헌 및 참조 URL
1. Data Science for Business
2. 데이터분석 전문가가이드
3. 네이버 사전

언제 부터 였던가 생각해보니 아르바이트 겸 외부 컨설팅을 의뢰 받고 맥북 프로를 처음 써봤을 때 부터 였던 것 같다. 지금은 거의 대부분의 작업을 맥으로 작업을 하다 보니 윈도우에서만 실행되는 일부 프로그램들 때문과 회사 내부 ERP프로그램이 윈도우 ...