2016년 6월 12일 일요일

헬로 데이터 과학

몇 번 망설이다 보게 된 책. 우연히 저자의 블로그를 통해 '엑셀을 이용한 데이터 분석 길라잡이' 형식의 내용을 미리 접해버렸기 때문이다.

하지만 결국 마이크로소프트 데이터 과학자라는 타이틀에 이끌려 구매^^; 물론 저자의 주제의식 전반을 살펴볼 수 있다는 점에서 책이 낫겠지.

저자는 다음 한마디로 '데이터 과학'이라는 뜬구름을 현실로 만들어준다.

'데이터는 테이블이다' (40 페이지)

데이터는 분석이 가능할 때만 의미가 있음을 이보다 더 쉽게 설명할 수 있을까?

학생들의 성적을 관리해보자. 수기로 기록하는 것과 열과 행의 테이블 구조를 이용하는 것은 어떤 차이가 있을까?

"학번이 10번인 장길산 학생의 성적은 국어 85점, 영어 70점, 수학 60점"
"학번이 11번인 홍길동 학생의 성적은 국어 95점, 영어 90점, 수학 100점"
"학번이 12번인 임꺽정 학생의 성적은 국어 80점, 영어 75점, 수학 55점"

데이터베이스 구조

열과 행의 구조를 갖는 테이블 구조로 데이터를 관리하면 전체 현황 파악은 물론, 통계나 관계 분석이 쉽고 편해진다는 사실을 알 수 있다. 엑셀이나 데이터베이스 등 대부분의 데이터 처리 프로그램이 데이터를 테이블 형태로 다루는 것은 우연이 아니었던 것.

이제 데이터를 테이블 형태로만 만들어주면 누구나 데이터 분석을 할 수 있다는 사실을 알게 됐다.

그런데 이게 쉬울까?
수집된 원본 데이터를 분석에 사용할 수 있는 형태로 준비해야 한다... 데이터가 분석에 편리한 형태로 정리되지 않으면 분석에 훨씬 많은 노력이 들기 때문이다... 이런 데이터 처리는 데이터 분석을 하는 사람들이 대부분의 시간을 보내는 작업이기도 하다. (145 페이지)

왜 대부분의 시간을 데이터 처리에 할애해야 하는 걸까? 간단한(?) 사례 하나를 살펴보자. 리눅스 운영체제는 로그인 성공/실패 등의 인증 관련 이벤트를 'secure'라는 로그에 기록한다. 로그인 실패 현황이 궁금하다면 해당 로그를 어떻게 분석해야 할까?


20만 줄이 넘는 로그를 무턱대고 분석할 수는 없으며, 정확한 분석을 위해서는 로그에 대한, 데이터에 대한 기본적인 이해가 필요하다.

해당 로그에서 핵심 정보이자 분류 범주는 네 번째 열에 위치한 '프로세스'이다. 해당 로그를 이해하려면 먼저 어떤 프로세스들이 발생하는지에 대한 이해가 필요하다는 얘기. 확인해보자.

날짜, 시간, 호스트명 정보 삭제

메시지 정보 삭제

프로세스 번호 정보 삭제

중복 제거 후 정렬

총 7개의 프로세스가 확인됐다. 그러나 프로세스의 발생 현황만으로는 이벤트별 세부 내역을 알 수 없다. 같은 프로세스내에서도 메시지의 성격은 다를 것이기 때문에 당연히 프로세스별 메시지 현황을 파악해야 한다.

'sshd' 프로세스에 의해 발생한 로그만의 세부 메시지를 확인해보자. 그런데 나머지 로그를 모두 삭제했음에도 너무 많다. 언제 다 확인하나?


하지만 테이블 구조로 바꾼다면?

다행히 컴퓨터에서 발생하는 대부분의 로그는 나름의 형식을 갖춘 반정형 데이터이며, 해당 로그는 날짜, 시간, 호스트명 정보가 일정 길이로 구분되어 있다. 그리고 이런 특성을 이용하면 엑셀을 통해서 쉽게 열과 행의 구조를 갖는 테이블 형태로 변환할 수 있다.



그러나 딱 거기까지만이다. 핵심 정보인 프로세스와 메시지 정보는 길이 구분이 다르기 때문에 하나씩 읽어야 하는 상황은 변함이 없다. 프로세스와 메시지 정보도 구분해보자. 프로세스와 메시지 정보를 구분자 'ㅋ'으로 구분하여 테이블로 정리한 결과는 다음과 같다.




이제 프로세스별 메시지 내역을 확인할 수 있으며, 프로세스별 메시지의 주요 키워드는 대략 다음과 같다.

'login' 프로세스 선택

'login' 프로세스에 의해 발생한 메시지 현황

프로세스별 메시지의 주요 키워드

이제 메시지 정보에서 확인된 키워드를 추출하는 작업이 필요하며, 추출한 메시지별 키워드를 정리한 결과는 다음과 같다.



분석이 가능한 데이터 구조, 테이블

엑셀의 피벗테이블 기능을 이용하면 간단하게 프로세스별 메시지의 키워드 발생 현황 및 발생 추이를 확인할 수 있다. 배보다 배꼽이 더 큰 독서 후기



현장에서 IDS 로그를 분석할 때면 보통 룰 하나당 이틀 정도의 시간이 걸리곤 했다. 데이터를 테이블로 정리한 후 이리저리 통계 분석을 하느라 하루, 통계 분석 결과를 바탕으로 보고서를 쓰느라 (스토리텔링을 하느라) 하루.

이러한 데이터 처리 작업은 단순히 시간을 많이 할애한다고 해서 가능하지도 않으며, 당연히 데이터의 속성, 즉 데이터 자체에 대한 이해가 필요하다. 그리고 그 이해도를 높이는 방법은 데이터를 많이 접해보는 것뿐이다. 삽질을 많이 할수록 유리하다는 얘기(..)

결국 스스로의 문제 인식이 필요하다. 목 마른 사람이 우물 판다고, 문제를 인식하고 해결의 필요성을 느껴야 삽질이 즐거워지니까.
자신에게 절실한 문제에서 출발한다. 흔히 말하는 빅데이터나 데이터 과학은 대용량 데이터나 복잡한 분석 기법에 초점을 맞춘다. 하지만 위 사례(에어비앤비)의 주인공들은 자신에게 절실한 문제에서 출발하여, 이를 해결하기 위한 최소한의 데이터 분석과 실험으로 해결책을 찾으려고 노력했다. (39 페이지)

많은 생각을 하게 만드는 구절이다. 문제가 해결되지 않고 있다는 얘기는 그만큼 문제 해결이 별로 절실하지 않다는 뜻일 수도 있으니까.

나가며


이제 빅데이터(또는 AI)를 들먹이지 않으면 데이터 분석 축에도 끼지 못하는 세상에서 저자는 감히 이렇게 제안한다. (29 페이지)
문제 정의에서 시작하라. 데이터에 관심을 갖기 시작한 사람들이 범하는 첫 번째 오류는 무작정 데이터부터 모으기 시작하는 것 
스몰데이터로 시작하라. 문제 해결에 초점을 맞추다 보면 생각보다 많은 데이터가 필요하지 않다는 사실을 발견하게 된다. 
주변에 있는 도구로 시작하라. 엑셀만 활용해도 웬만한 분석은 모두 가능하다. 
간단한 분석 기법으로 시작하라. 데이터 과학에 대한 또 다른 오해는 복잡한 수학 및 통계 기법을 알아야 한다는 것. 하지만 대부분의 문제는 간단한 통계 기법으로도 해결할 수 있다.

그리고 "(엑셀로 한눈에 확인하면서 작업할 수 없을 정도로 데이터가 커지고, 종류가 많아져서) 모든 데이터에 이름을 붙여야만 기억할 수 있다면 그때 R을 고려해보라 "고 이야기 한다. (77 페이지)

생각해보니 십여 년간 VIM과 엑셀만으로 IDS 로그를 분석하면서 한 번도(?) 불편한 적이 없었다. 이유가 뭘까? Logparser가 있었잖아

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스