러닝 SQL - 데이터 생성, 검색, 조작까지 데이터 제대로 주무르기
앨런 볼리외 지음, 류수미 외 옮김 / 한빛미디어 / 2021년 3월
평점 :
절판


  • 책의 구성과 개요

SQL의 전반을 깔끔하게 그리고 단계별로 잘 정리한 책이다. 다루고 있는 내용을 간단히 정리하면 다음과 같다.

RDBMS가 탄생하기까지 역사의 전반과 시대적 필요성을 훑어본 후 데이터베이스를 설치하고 실습할 데이터를 마련한다. 이후 기본적인 CRUD를 다룬 후, Where 절에 해당하는 필터링을 배운다.

다중 테이블을 기반으로 한 기본 조인, 데카르트 연산에 속하는 수학의 집합 연산, 자주 활용하는 데이터의 기본 조작을 다룬다. 이어서 SQL 연산 중 가장 많이 활용되는 집계 연산과 목적을 달성하기 위한 임시 거처 서브쿼리를 익힌다.

10장부터는 중급 수준에 첫 발을 내딛는데 OUTER JOIN과 같은 심화과정의 조인에 대해 학습한다. RDBMS의 이름에서도 알 수 있듯 여러 테이블 간의 관계가 가장 중요한 개념이기 때문에 이 Join 연산을 자유 자재로 다룰 수 있어야 의미있는 데이터 활용이나 분석을 위한 내공을 쌓을 수 있다. 개인적으로 10장은 가장 중요한 장이라 생각한다.

이어서 Case문을 학습하고 트랜잭션의 기본 개념을 다룬다. 트랜잭션 또한 RDBMS의 중요한 개념 중 하나인데 ACID를 보장하기 위해 하나의 트랜잭션을 Lock을 통해 보호하는 과정을 쉽게 잘 설명하고 있다.

다음으로 설명하는 인덱스와 각종 제약조건은 성능과 RDBMS의 특성을 유지하기 위한 수단으로 중요한 개념들이며 View, Metadata로 보다 편리한 데이터 활용 방법을 익힌다. 그 외 한 차원 높은 분석을 위한 데이터 윈도우나 리포팅 함수를 익히며 파티션을 통한 대용량 데이터베이스 처리 기술을 익힌다.

마지막으로는 아파치 오픈 소스인 드릴을 소개하며 MongoDB를 SQL로 접근하는 방법을 익히게 되는데 RDBMS 자체에 그치지 않고 NoSQL 진영과의 호환성을 고려한 점이 인상적이었다.


  • SQL의 중요성

SQL을 실전에서 20년 가까이 다뤄온 사람으로써 이 정도면 SQL을 고급으로 다루는 데 필요한 80%의 기초는 충실히 반영한 책이라고 평가하고 싶다.

SQL은 RDBMS를 다루기 위한 태생적인 목적으로도 중요하지만, 특히 요즘은 더 중요한 스킬이 된 것 같다. AI와 빅데이터 시대에 수요가 높아졌기 때문이다. 데이터는 성격에 따라 RDBMS와 같은 Tabular 성격의 정형데이터만 존재하는 것도 아니고, Json과 같은 반정형 데이터에서부터 이미지, 텍스트와 같은 비정형 데이터도 존재한다.

지금까지 인류가 쌓아 온 대다수의 유의미한 지식들이 여전히 RDBMS로 구축되어 있는데다 SQL이 가지고 있는 깔끔함과 쉬운 난이도라는 장점 때문에 NoSQL 진영 반정형 데이터의 영역도 SQL로 접근하려는 시도가 지속적으로 이어지고 있다. 이 책 18장에서 다루는 아파치 드릴이 그런 시도 중 하나이다. Hadoop 에코 진영의 Hive도 마찬가지다.

데이터 분석 진영에서의 변화에서도 SQL의 중요성을 느낄 수 있다. R의 데이터프레임은 정형 데이터를 분석하는데 가장 많이 활용하는 데이터 구조인데 자체 기능 외 SQL을 활용할 수 있도록 지원하고 있으며, Python의 Pandas는 SQL을 지원하지는 않지만, SQL로 필요로 하는 데이터 구조에 가깝게 미리 추출해 놓는다면 이어지는 Pandas의 분석이 얼마나 수월해지는지는 실전에서 경험해 본 사람이라면 누구나 공감할 것이다.

Python의 특성이 어떤 표현이든 사용할 수 있다는 유연성에 있다면 그만큼 다양한 분석 방법이 존재하여 유지보수하거나 커뮤니케이션 하는 측면에서는 어려움이 있는 것 또한 사실이다. 단 몇 줄의 SQL의 실행결과와 동일한 결과를 구현하기 위해 Pandas로 접근하면 코드 라인이 길어지거나 중복 단어를 여러번 중첩해서 사용해야 하는 불편함이 있기 때문이다.

물론 SQL은 통계학에서 말하는 기초 통계 수준의 연산과 가공을 완벽하게 지원하기에는 비 효율적인 측면이 분명히 있으며, 나아가 추론 통계에 적용하기에 적합한 형태가 아니며, 2차원처럼 보이지만 컬럼 축의 변환이 불가능한 고정형으로 되어있다. 나아가 머신러닝에 적용하는 것은 더욱 비효율적이며 딥러닝과 같은 비정형 데이터는 커버를 못한다.

따라서 이런 장단점을 십분 활용하여 Python(R)과 SQL 간 적정 경계선을 찾는 능력이 중요하다. 데이터 분석 진영의 최근 핫한 프로그램들이 커버하기 비효율적인 부분을 SQL로 커버한다면 시간이 생명인 요즘 생산성이나 가독성을 높이는데 큰 도움이 될 것이다.

이 책을 추천하고 싶은 이유 중 하나는 이런 시대적 필요성을 반영하는 목적에 충실하도록 쓰여졌다는 점을 들 수 있겠다.


  • 책의 장점

    • 책의 가장 큰 장점은 SQL을 쉽게 익힐 수 있도록 단계적으로 깔끔하게 설명하는 구성이라고 할 수 있다. 쉽고 구현 가능한 눈에 보이는 것을 먼저 시작하여 조금씩 살을 붙여나가며 중간중간 상세한 설명으로 보충하고 있어 가독성이 뛰어난 책이라는 생각이 들었다.

    • 오라클 중심의 SQL 책은 시중에 많지만, MySQL이 중심이 된 책은 찾기 어렵다.

    • MySQL만 다루고 그치는 것이 아니라 Oracle이나 SQL서버에서 활용 방식이 다른 경우 함께 설명하고 있어 SQL 진영 종사자라면 누구에게나 도움이 될 만한 책이다. MariaDB는 이미 많은 분들이 알고 있듯 아파치 재단과의 싸움끝에 MySQL 원년 개발자들이 뛰쳐나와 만든 DB이기에 굳이 추가적인 설명은 필요 없을 듯 하다.

    • RDBMS에만 국한되는 것이 아니라 연계되어 활용될 수 있는 확장성도 고려한 점이 마음에 들었다. 아파치 드릴을 다룬 것이 그런 예시라 할 수 있다.

    • 각 단원 마지막에 예시들이 배운 내용을 복습하고 정리하는데 알맞은 수준으로 잘 구성되어 있다.


  • 책의 단점

    • 10장 조인 심화 부분의 내용이 아쉬웠다. SQL을 접하면서 중급에서 고급으로 넘어가는 걸림돌이 하나 있다면 Outer Join을 들 수 있겠다. 단순 Outer Join이라면 그리 어려울 것이 없으나 일부 컬럼에만 Outer Join이 걸린다면 머릿속으로 전체 데이터 결과의 형상이 직관적으로 떠 오르지 않게 된다. 그런 부분들을 보다 심도있게 다뤘다면 더욱 각광을 받지 않았을까 싶다.

    • SQL92 표준을 다룬 것은 좋았으나 ANSI 표준 전반을 같이 언급, 비교하는 시도도 있었으면 했다. 이 책의 큰 장점 중 하나가 위에서 언급한대로 각 분야의 연계부분도 고려한 호환성이라 할 수 있겠는데, SQL92만 다룬 점은 대통합에 2% 부족한 약간 아쉬운 느낌이다.

      진영마다 말은 많지만 outer join을 단순히 (+) 기호로만 표현한다는 것은 가독성 측면에 도움이 되고, 코드라인의 길이를 줄여 오류에 대한 잠재가능성을 낮춰준다는 점에서 분명 다룰만한 가치가 있기 때문이다.


어느 책이나 그렇듯이 명작도 난이도와 눈높이를 맞추지 못한 독자가 읽으면 졸작이 되는 법이기에 난이도도 추가로 언급하려 한다.

데이터나 SQL을 전혀 다루지 않은 왕초보 분들이라면 조금 어렵게 느껴질 수 있으며, SQL이 처음일지라도 엑셀 등으로 데이터에 친숙하거나 감이 좋은 분들이라면 처음부터 이 책으로 시작해도 괜찮을 거라 생각한다. 반면 일부 컬럼만 활용한 Outer Join에 능숙한 분이라면 혹은 그 이상의 실력이 있는 분들께는 너무 쉬운 책이 되어 많은 것을 얻지는 못할 것이다.

총평을 내리자면 전반적으로 SQL을 지식의 흐름에 맞춰 깔끔하게 정리하고 있어 SQL을 처음으로 익히는 분들이 좋은 메타 지식을 형성하기에 도움이 될 만한 책이라는 평을 내리고 싶다. SQL에 입문하거나 데이터 분석 업계 종사자 분들 중 SQL을 처음으로 배우는 분들께 추천하고 싶다.


한빛미디어 “나는 리뷰어다” 활동을 위해서 책을 제공받아 작성된 서평입니다.



댓글(0) 먼댓글(0) 좋아요(1)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
당신의 생각을 정리해드립니다 - 인생을 바꾸는 생각정리스킬
복주환 지음 / 비즈니스북스 / 2021년 3월
평점 :
장바구니담기


“꼭 읽어야 할 책”

다소 노골적이지만 단도 직입적인 소개로 시작해 보았다. 책 속에 인생을 성공으로 이끌기 위한 기회가 너무 많이 숨어 있기 때문이다. 이 책은 사실 리뷰도 필요없다. 첫번째 이유는 무조건 읽어야 할 책이기 때문이고, 두번째 이유는 아래 그림이 리뷰 역할을 대신 해주기 때문이다.개요

이 만다라트 도식은 책에서 알려주는 스킬을 활용해 저자가 직접 이 책을 구상할 때 적용해 본 그림으로 재귀적 발상이 돋보인다. 네모칸을 중심부터 하나하나씩 따라 읽어가면 책에서 말하고자 하는 내용은 물론 그 효과가 어떤지 하나의 그림으로 절반은 이해할 수 있을 것이다. 믿고 볼 수 있는 책이라는 증거이기도 하다.

“생각정리”라는 주제를 다루는 책의 격에 어울리게 읽기가 너무 편했다. 만다라트 도식으로 이미 생각을 정리하고 책으로 표현했으니 논리적인 전개나 매끄러움, 통일성이 일품이다. 약 300페이지의 전체 분량을 읽는 데 채 2시간이 걸리지 않았다. 반면 비교적 짧은 시간에 어느 책보다도 완성도 높은 이해가 가능했다. 저자가 제시하는 전략을 현실로 입증한 셈이니 신뢰가 가지 않을 수 없다.

책을 이해하는 데 장황한 설명보다는 저자가 알려주는 생각의 도구들을 먼저 정리하는 것이 나을 듯 하다. 이어서 저자가 제시하는 인생에 도움되는 몇가지 인상깊은 인사이트들을 요약해 본다.


  • 원페이지
    생각정리가 어려운 이유는 눈에 보이지 않기 때문이다. 마치 집 정리를 할 때 처럼, 어떤 물건들이 있는지 꺼내 나열하고, 비슷한 것들끼리 분류하고, 우선순위를 생각해 배열하듯이 손으로 쓰면서 시각화 하여 눈에 보이게 하는 과정이 필요하다. 더불어 쓰는 것만으로도 불안감이 해소되고 마음이 편안해지는 효과가 있다.

    가장 먼저 소개하고 싶은 저자의 도구는 원페이지이다. 개인적으로 읽으며 가장 마음에 들었던 정리 도구로 생각정리에 대한 저자의 노하우가 집대성된 느낌이다. 작성하는 방법을 간략히 정리해 보았다.원페이지

    • A4용지를 반으로 총 5번 접는다. (2^(5-1)=32, 위 그림처럼 총 32칸이 나온다.)
    • 왼쪽 16칸에 업무와 관련된 생각을 나열하고, 오른쪽에는 일상과 관련된 생각들을 나열해 본다.
    • 나열된 생각들을 분류해보자. 일반적으로 4가지로 분류된다.
      • 해야 하는 일 / 하고 싶은 일 / 고민 / 아이디어
      • 위 4가지 중 어떤 유형에 해당하는지 각각 ○, □, △, ☆ 으로 덧대어 그려본다.
    • 하지 말아야 할 일이나 불필요한 생각들은 X표시를 하며 지워버린다.
    • 우선순위를 배열한다. 위 그림처럼 중요한 것 부터 1,2,3,… 숫자를 매긴다.
    • 하나의 네모칸을 상, 중, 하로 나눠 “하고 싶은 이유, 책임자, 기간”을 아래 그림처럼 적는다.상중하
    • 종이를 뒤집는다. 우선순위에 입각하여 4개를 선정한 뒤 각각에 대해 시간순으로 7가지 실행 스텝을 세운다. 실전에서 어디서 병목현상이 생기는지 알 수 있으며, 강약점을 구분할 수 있다. 마찬가지로 책임자와 소요시간을 적되 시간은 1.5배 정도로 여유를 둔다. 최종 결과는 아래 그림과 같을 것이다.뒷면

  • 마인드맵
    데이터를 우리 뇌와 유사한 모양으로 만들면 우리 뇌가 처리하기 쉬워진다. 뉴런과 시냅스의 동작 및 구성은 마인드맵과 유사하여 우리 뇌가 이해하기 안성맞춤인 시각화 도구이다. 요즘 AI 분야에서 가장 핫한 딥러닝도 데이터를 뇌 구조와 비슷하게 재구성한다. 이 역시 효과는 기존 머신러닝 성능을 압도한다.

    특히, 마인드맵 그리기에 실패하는 이유를 밝혀주고 있어 크게 도움이 되었다. 요소들을 연결하는 선의 역할이 다양하기 때문인데 나는 그동안 이 책에서 말하는 분류가지에만 초점을 맞추고 있었음을 알 수 있었다. 책에서 말하는 선의 종류는 크게 3가지로 나뉜다.

    • 연상가지
      • 느슨한 연상 : 창의적 연상. 예) 원숭이 -> (빨가면 사과, 사과는 맛있어,…) -> 기차
      • 강한 연상 : 논리적 연상. 예) 여름 -> 휴가
      • 유사 연상 : 비슷한 것을 떠올림. 예) 유리구슬 -> 물방울
      • 반대 연상 : 반대 개념. 예) 흑 -> 백
    • 분류가지
      상하관계 혹은 목적 등의 기준으로 분류
    • 질문가지 질문의 꼬리를 이어나가며 생각을 구체화 하는 기법

    그 외 마인드맵을 활용하는 다양한 예제가 2 ~ 3장에 걸쳐 등장하고 있어 주어진 정보로 스스로 마인드맵을 그려보고 책이 알려주는 정답 그림과 비교한다면 보다 빠른 습득이 가능할 것 같다.

    마인드맵


  • 로직트리
    • What Tree(현황파악) : 문제의 전체 상황을 그려보며 구성요소를 분해한다.
    • Why Tree(원인분석) : 문제의 진짜 원인이 어디에 있는지 꼬리를 물며 질문을 이어나간다. 질문에 대답한 답에 Why를 연달아 5번 이상 시전한다.
    • How Tree(해결방법) : 자유로운 분위기, 비판금지, 질보다 양, 결합과 개선 속에 방법을 찾는다.로직트리

  • 만다라트
    맨 윗 부분에서 이미 설명한 바 있다. 목표설정, 의사결정, 아이디어 발상, 콘텐츠 기획 등에 사용된다.
    • 중심 토픽 선정
    • 주요 토픽 선정 : 입문서(이해도), 개론서(큰틀), 전문서(지식), 경험과 비교 및 대조 과정을 거친다. 책이나 강의로 주요 토픽의 밸런스를 잡을 수 있는 도메인 지식을 사전에 확보할 필요가 있다.
    • 하위토픽 : SMART(구체적, 측정가능, 행동가능, 현실적으로 타당, 마감기한)
    • 우선순위 정하기
    • 5W3H 질문 던지기(누가, 언제, 어디서, 무엇을, 왜, 어떻게, 얼마나 많이, 비용)

  • 사명선언문
    “인생은 왜 사는가”에 대한 답변 혹은 인생 전체의 계획을 세우기 위한 용도로 적합하다.
    • 사명 : 존재의 이유
    • 가치 : 사명을 실현하기 위한 신념. 다른사람과 차별화, 생활신조, 살면서 지키고자 하는 나만의 원칙 등
    • 비전 : 꿈꾸는 이상적인 미래 모습. 3 ~ 10년 뒤 이상적인 모습
    • 목표 : 비전을 위한 도전과제사명선언문

  • 전략
    • 시간관리
      • 시간도 가계부를 쓸 필요가 있다.
      • 저자의 시간관리 방법 특히, 시간관리 체크리스트에서 많은 인사이트를 얻었다.
      • 스티븐 코비의 시간관리 매트릭스를 그려보고, 긴급하지 않으나 중요한 일에 투자한다.
    • 목표정리
      • 역산적으로 미래 모습을 먼저 상상 후 현재의 모습으로 엮어본다.
      • 미래를 예측할 수 있는 유일한 방법은 스스로 미래를 창조하는 것 (by 피터드러거)
      • SMART
        • 구체적 : 6W (누가, 무엇, 어디서, 시간, 조건과 제약, 이유와 목적, 보상)
        • 측정가능 : 수량, 횟수, 기간 등의 숫자
        • 행동가능 : 7스텝 단계적 방안 마련
        • 현실적으로 타당 : 작은 습관 부터
        • 마감기한 : 월, 주, 일 단위
    • 문제정리
      • SWOT를 활용하여 OS, TS, OW, TW 전략을 세워본다.
      • 로직트리를 활용하여 즉흥적인 해결책, 즉, 쓸모없는 How가 도출되지 않도록 유의한다.
    • 인생의 주요영역 8가지 : 건강, 재무, 가족 및 사회 관계, 주거, 직업 및 경력, 학습 및 자기계발, 사회참여 및 봉사, 여가 및 영적활동

    • 메모
      생각정리가 어려운 또 하나의 이유는 기억의 휘발성 때문이다. 이를 위해 필요한 것이 메모이며 도구는 가리지 않는다. 메모지, 녹음기, 에버노트, 카카오톡 나에게 보내기, 여백, … 등. 단기기억을 담당하는 해마에 3번 이상 반복되면 중요 정보로 인식하여 장기 기억이 가능해진다.

    • 행동
      • 시작
        나는 개인적으로 30대를 지나며 주위 지인들이 2개 그룹으로 쪼개진다는 사실을 느꼈다. 성공 그룹, 그리고 나머지 보통 그룹. 성공 그룹은 일단 하고 싶은, 해야 하는 일이 생기면 주저하지 않고 고민할 시간에 일단 뛰어들고 본다. 그리고 나머지 애로사항은 버티며, 적응하며, 견뎌내더라. 이 책에서 말하는 바도 같다. 두려움 없이, 겁 없이, 확신을 갖고 시작한 사람들만 이 시장에서 버티고 남게 된다.

      • 공개선언효과
        SNS 매체를 이용한다. 가능한 많은 사람들에게, 반복해서, 다양한 방법으로, 스토리텔링을 동원하며, 도움을 요청하고, 실패 시 치뤄야 할 대가를 끔찍한 것으로 정해서, 대가도 공개한다.

      • 생각은 20%, 행동은 80%!


나름 짧게 핵심만 요약한 것임에도 내용이 상당히 길어졌다. 그만큼 읽는 내내 저자가 던지는 메시지가 강렬했고 조언 하나하나 버릴 것이 없었다. 특히, 원론적인 내용이 아닌 인생을 위한 실행 가능한 도구와 방법을 알려주고 있다는 점이 가장 큰 장점이다.

마지막으로 인상깊었던 저자의 에필로그를 인용하며 리뷰를 마친다.

하루에는 144번의 10분이 있다. 그 중 한번이라도 생각정리에 사용해 보자. 그 작은 시간들이 모여 생각이 바뀌고, 생각이 바뀌면 행동이 바뀌며, 행동이 바뀌면 습관이 바뀌고, 결국 운명이 바뀐다.




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
빅데이터 시대, 성과를 이끌어 내는 데이터 문해력 - 그래프와 도표만 바라보는 당신에게
카시와기 요시키 지음, 강모희 옮김 / 프리렉 / 2021년 2월
평점 :
장바구니담기


리터러시(literacy; 문해력)이란 주어진 정보를 이해하고 활용할 수 있는 능력을 의미하며, 이 책에서는 데이터 리터러시를 집중적으로 다룬다. 공통적으로 누구에게나 데이터 속에 숨은 진짜 의미를 알아내거나 자신의 업무에 데이터를 활용할 수 있는 능력을 키워주는 책이자, 더 나아간다면 데이터 관련 직군 초보자들이 문제, 원인, 해결책 등의 본질에서 벗어나 분석 기법이나 딥러닝과 같은 기술에만 매달리는 현상에서 탈피하는데에도 도움을 주는 내용을 담고 있다.

책에서 말하고자 하는 핵심은 아래 도표로 설명된다. 문제를 명확히 파악한 후, 지표 및 데이터를 일치시켜 현 상태를 파악 및 평가한 후, 원인을 찾아, 해결방안을 제시할 수 있어야 한다는 것이 이 책에서 말하는 메인 아이디어이다.핵심

여기에서는 데이터 리터러시가 부족한 일반인들이 자주 범하는 개선할 수 있는 인상깊은 사례 몇가지를 소개하는 것으로 책 소개를 대신하고자 한다.


  • 여러분은 아래 데이터(그래프)를 어떻게 활용할 생각인가?
    예제

    대부분의 답은 “츠바메시의 아동 인구밀도가 산조시보다도 2배나 많다.”등의 결론을 내린다. 하지만 그 결론이 무슨 의미가 있을까? 여기서 파악해야 할 핵심은

    “이 그래프를 작성한 사람은 무엇을 말하고 싶었을까요?” 이다. 대부분의 사람은 이처럼 주어진 자료를 보는 관점부터 문제가 있는 셈이다. 그래서 분석 자체가 목적이 되는 우를 범한다.

  • 활용의 성공과 실패를 가르는 접근법
    • (X) 데이터를 가공 => 데이터에서 무엇을 알 수 있을지 생각한다.
    • (O) 데이터에서 무엇을 알 수 있을지 생각한다. => 데이터를 가공한다.
    • (X) 데이터 => 가설
    • (o) 가설 => 데이터
  • 문제의 핵심은 “나는 무엇을 알고 싶은가? 무엇을 해결하고자 하는가?”이다.

  • 지표를 정할 때 범하는 실수
    • 고객 불편사항에 대한 개선이 이루어지지 않고 있다. => 지표 : 클레임수 클레임 수를 지표로 정한 것 자체가 원인으로 단정한 것으로 주관이 개입되는 우를 범했다.
    • 광고에 대한 반응이 적다 => 지표 : 문의 수 문의 수는 반응의 일부일 뿐이다.
  • 평균값의 함정
    • 서비스 A의 평균 만족도는 4.1이고, B의 평균 만족도는 3.5이다. 위 문장만 놓고 봤을 때 누가봐도 A가 좋다는 결론을 내리겠지만, 분포를 확인하니 아래 그림과 같았다.편차
      과연 확실히 A가 좋은 것일까? 편차가 크다는 것은 불안정성을 의미하기도 하지만 그만큼 발전 가능성으로 볼 수도 있다.
  • 비교의 기술 : 크기, 추이, 편차, 비율

  • 목표는 행동!
    • 이 젤라토는 섭씨 18.7도 이상, 습도 43.92% 이상일 때 잘 팔린다.
    • 매출은 3,500만원이다. 이 정보는 큰 의미가 없다. 행동을 취할 수 없기 때문이다. 즉, 데이터 정리에서 끝나고 마는 것을 지양해야 한다.

    • 해결책 : 원인 후보 열거 > 지표 결정 > 관련성 확인 예) 경쟁사가 가격 변동을 몇 차례에 걸쳐 반복하고 있다. => 지표 : 가격 변동과 매출 변화의 관계성 파악을 위한 가격 변동률 데이터를 활용한다.

    • 관련성 파악 방법
      • 산점도를 통한 경향
      • 그룹화 : 상위 그룹군의 특성을 하위 그룹군에 반영하며 효과를 기대해본다.
      • 이상치에 주목한다.
      • 변화점(분기점)을 찾는다.
      • 상관계수를 활용한다.
  • 도전문제로 원인 찾아보기
    • 문제 : 처음에는 주 1일만 활동한다고 들었는데, 실제 주 3일도 넘게 활동하고 있다. 거짓말 한 것도 기분 나쁘고, 고문 역할을 그만두는 것이 어떨까?
    • 답안의 한 예시답안
    • “만약 XXX가 아니라면?”이라는 꼬리를 무는 질문을 계속 던져본다.
  • 주의해야 할 몇가지 사항
    • 직접적인 관계인지, 간접 관계인지? 예) 홈페이지 업데이트 빈도 => (블로거가 블로그 게재) => 점포 방문객 수 증가
    • 원인은 여럿이거나 복잡할 수도 있다.
    • 선형 관계가 아닌 경우
    • 상관관계와 인과관계 구별하기
    • 현재 상태를 파악 후 바로 해결방안을 모색하고 있진 않은지? (단계 건너뛰기, 맨 윗 그림 참조)
    • 데이터로 설명 가능한 범위인가?
    • 인지편향(심리학적 선입견 등)

위에 소개한 사례들은 맛만 볼 수 있는 예제 몇가지에 불과하지만 책이 어떤 내용을 담고 있는지 소개하는 정도로는 충분할 것이다. 이 책은 위 예시와 같이 일반인들의 잘못된 데이터 접근방식의 예시를 들며 맨 위에 제시했던 그림에 해당하는 메인 아이디어를 서술해 나가는 책이다. 독자들이 감을 잡고 실무 분석에 있어 직접적인 도움이 될 수 있도록 알기 쉬운 예시 중심으로 구성된 점이 책의 장점이자 특징이라고 할 수 있다.

AI, 빅데이터 시대라 불리는 요즘 데이터에 대한 교양을 쌓고 싶거나, 혹은 데이터에 대한 감각이 부족하다거나, 기술 위주의 편식으로 인사이트를 도출하기 어려운 실무자에게 추천하고 싶은 책임을 강조하며 본 리뷰를 마친다.




댓글(0) 먼댓글(0) 좋아요(2)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
데이터 쓰기의 기술 - 따라 하면 끝나는 단계별 데이터 분석 10
차현나 지음 / 청림출판 / 2021년 3월
평점 :
장바구니담기


데이터 관련 코딩은 이제 어느 정도 알겠는데 이를 어떻게 적용할 것인지 고민해 본 적이 있다면 이 책이 큰 도움을 줄 것이다. 이 책은 제목에서 알 수 있듯 데이터 활용 스킬을 다루는 책이기 때문이다.

저자의 서문을 인용해 보자. 무작정 엑셀을 배웠다고 변화가 생기는 건 아니다. 무언가를 위해 편리한 엑셀을 이용하는 것인데, 그 무언가를 모르는채 Python이나 머신러닝 알고리즘에 집중한다면 목적 잃은 반쪽자리 노력이 되어 언젠가 살아있는 공부를 다시 필요로 하게 될지 모른다.

저자는 스타벅스커피코리아, 빅히트엔터테인먼트에서 근무한 데이터 사이언티스트로, 전작 “문과생, 데이터 사이언티스트 되다”와 “데이터 읽기의 기술”의 저자로도 유명하다.

반걸음 먼저 간 사람으로서 들려줄 수 있는 이야기라고 겸손하게 표현하고 있지만 개인적으로는 더 많은 데이터 사이언티스트 분들이 각자의 현업에서 데이터를 다루는 방법을 공유하는 이런 유형의 책들이 더 많이 나와줬으면 한다. 연구, 기술과 관련된 책은 많지만 경험을 다루는 책은 좀처럼 찾기 어렵기 때문이다.

책에서 다루는 가장 중요한 주제는 데이터 활용을 위한 10가지 스킬으로 각자의 실무에서 적용해 볼만한 유익한 템플릿이다. 10가지 질문을 아래와 같이 간추려 정리해 보았다.


  • 1. 디자인 - 질문하기
    매출이 감소했는데 내가 잘못해서 그런 걸까? 다른 원인은 없을까?

  • 2. 디자인 - 문장 쪼개기
    • 매출이 감소했는데 : 언제보다 감소했는가?
    • 내가 잘못해서 그런 걸까? : 매출감소 요인이 무엇일까? 인테리어? 메뉴, 간판, 식기, 광고, 홍보, 판매하는 사람, 진열이나 구성, 서비스나 맛 등이 변하진 않았나?
    • 다른 원인은 없을까? : 외부요인은? 시장 상황은? 방문자 수는? 경쟁업체가 생겼나?
  • 3. 디자인 - 데이터 찾기
    • 매출이 감소했는데 : 연월일시가 표시된 매출 데이터를 확보해야 한다.
    • 내가 잘못해서 그런 걸까? : 매장의 요소를 나누는 리스트를 만들어 본다.
    • 다른 원인은 없을까? : 상권의 유동인구 변화, 지역 인구 변화, 주요 유통채널의 매출 증감 등
  • 4. 디자인 - 데이터 분석하기
    • 낱개 분석 진행 : 시간별 패턴, 시간대별 판매 비교 등
  • 5. 스토리텔링 - 데이터 퍼즐 맞추기
    • 낱개 분석 흩었다가 모아보기
    • 앞뒤로 논리가 맞는지 확인
    • 작년 동기 대비 무어이 감소했는지를 밝혀야 한다.
  • 6. 스토리텔링 - 변화를 만들 제언하기
    • 출퇴근 고정 고객이 확보되었는데 왜 주말에는 상권이 활성화되지 않는가?
    • 주말 고객층을 다시 끌어들일 방법은 없을까?
    • 각각의 분석을 이어 이야기를 만들어내고 방향성을 제시한다.
  • 7. 스토리텔링 - 데이터에 옷 입히기
    • PPT나 문서 등 공유 및 발표를 위한 핵심을 정리해 본다.
  • 8. 의사결정 - 액션 아이템 만들기
    • 잘 팔리는 제품을 더 잘팔리게 하거나, 안팔리는 제품이 팔리도록 하기
  • 9. 의사결정 - 현장의 변화 만들기
    • 1회 2만원 구매 금액이 많을 경우, 3만원 이상 구매 시 혜택을 주고 반응을 살피기
  • 10. 의사결정 - 소비자의 반응 포착하기
    • 구매까지 연결된 고객은 이전보다 거의 늘지 않았다고 가정 시, 금액대가 높은 것이 문제인건지, 제품이 내키지 않아서 인지, 남은 제품이 집에 있기 때문인지에 따라 개선점이 달라진다. 주말마다 각기 다른 액션을 취한 후 분석을 다시 시작한다.

책은 총 4개의 챕터로 나누어져 있으며 이 중 챕터4가 가장 유익했다. 위의 10가지 스킬이 실전 사례에 적용되어 설명되기 때문이다. 한 두개의 실례에 적용이 된다면 처음엔 감이 안올 수도 있는데 10가지의 케이스에 적용을 시도한다.

10가지 케이스는 전작 “데이터 읽기의 기술”에서 선보인 데이터가 알려주는 소비자의 마음 10가지에 소개된 주제들이다.

  • 매출 데이터, 영수증, 날씨, 거짓말, 장소, 시간, 성별, 나이, 요소, 반응속도, 모바일

소비자의 마음을 대표하는 가장 중요한 데이터를 토대로 10가지 스킬을 적용하기 때문에 읽다보면 실무에서 부족했던 것이 무엇이었는지 깨닫게 되기도 하고, 꽉 막혀 더이상 진척이 어려운 부분에 희미한 길이 보이기도 한다. 무엇보다 실전 사례를 토대로 구체적이고, 현실적인 방안들을 제시하고 있어 이해가 쉽다.

나머지 1 ~ 3장은 10가지 스킬 각각에 대한 원론적인 설명이다. 책을 읽는 순서는 처음부터 읽기보다 4장의 10개 케이스 중 평소 궁금하거나 관심 있는 케이스를 선정해 먼저 읽어본 후 1 ~ 3장을 읽는 것을 추천한다. 구체적인 사례가 먼저 바탕이 되기에 읽기 한결 편하고 이해에 더 많은 도움이 될 것이다.

누구보다도 데이터 분석을 처음으로 접하는 사람이나 활용보다는 기술이나 스킬에 치우친 이들에게 추천하고 싶다. 분명 부족한 무언가를 든든하게 채울 수 있을 것이다.




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo
 
 
 
GAN 첫걸음 - 파이토치 신경망 입문부터 연예인 얼굴 생성까지
타리크 라시드 지음, 고락윤 옮김 / 한빛미디어 / 2021년 3월
평점 :
절판


GAN(Generative Adversarial Network, 생성적 적대 신경망)은 서로 경쟁하는 두 개의 신경망(생성자, 판별자)으로 구현된다. 생성자는 새로운 데이터를 생성하며, 판별자는 가짜와 실제를 구별한다. 생성자와 판별자는 서로 이기려는 경쟁을 지속하는데 위조범이 그럴듯한 모조품을 만들면 판별자가 잡아내는 식의 경쟁이다.

말이 쉽지 GAN을 배우려고 책을 펴면 이상한 것들을 새로 배워야 한다. 오토인코더 부터 시작해서 G와 D가 팽팽하게 서로 당기고 있는 이상한 긴 수식, Likelihood에서 부터 각종 확률과 분포 등등..

반면 이 책은 GAN을 처음 접하거나 어려워 포기했던 이들에게 제 격인 책인 것 같다. 내 기억이 맞다면 오토 인코더라는 말은 한마디도 안나왔다. 대표적으로 눈에 띄는 장점을 정리하면 다음과 같다.

  • GAN의 핵심을 3단계로 정리하고 예제로 구현하는 부분은 그 어느 책보다도 전달력이 뛰어났다.

  • 반드시 필요한 것만 간추려 알려주고 있어 완급 조절이 훌륭한 책이다.

  • 계보(AE, VAE, GAN, DCGAN, MMGAN, NSGAN, WGAN, WGAN-GP, ProGAN, SGAN, CGAN, CycleGAN, RGAN, SAGAN, BigGAN에 이르는…) 흐름이 아닌 모드 붕괴, 경사하강법 등 문제 인식에 초점을` 맞춘 접근법이 마음에 들었다.

  • 난이도는 쉬운 반면, 다루는 깊이는 논쟁이 되고 있는 연구까지 다루고 있다.

  • 아마도 GAN, 딥러닝, PyTorch 셋 다 몰라도 이 책이라면 무난히 GAN의 세계에 입성할 수 있을 것 같다. 정말 쉽다.

간단한 장점만으로는 설명이 부족한 것 같아 전체적인 구성 및 책을 읽으며 인상깊었던 핵심 내용들을 위주로 아래와 같이 정리해 보았다.


  • 파트 1 : 준비과정
    먼저 PyTorch와 Colab의 기초를 배운다. Define By Run 방식의 계산 그래프를 토대로 자동 미분을 실습하는 과정을 통해 PyTorch의 활용법과 직관적인 장점을 느낄 수 있다.

    다음으로 MNIST 손글씨 분류 신경망을 만들어 본다. Pandas와 Matplotlib으로 MNIST 데이터가 어떻게 생겼는지 열어본 후, 기본적인 네트워크를 구성한다. 오차를 정의하는 손실함수, 가중치 학습 방법인 옵티마이저, train() 함수 등을 만들며 신경망의 기본을 다진다.

    이어서 만든 모델의 성능을 단계적으로 아래와 같이 향상시킨다.

    • 손실함수 : MSE -> BCE
    • 활성화함수 : Sigmoid -> LeakyReLU
    • 옵티마이저 : SGD -> Adam
    • 정규화 적용 : LayerNorm()
      위 단계를 거쳐 모델의 성능을 87%에서 97%까지 끌어올리는데, 딥러닝의 성능 개선을 위한 일반적인 방법을 핵심만 잘 간추리고 있다.

    다음으로 CUDA는 어떻게 활용하는지, 성능은 얼마나 향상되는지 측정해본다.

    • Vectorization : Python(for) -> Numpy(행렬) / 1500배 성능 향상
    • CUDA : Numpy(CPU) -> CUDA(GPU) / 150배 성능 향상

    파트1은 정리하자면 딥러닝과 PyTorch의 기본을 복습하는 장이다. 이미 둘을 잘 알고 있다면 건너 뛰어도 무방하다.

    하지만 스스로 딥러닝이 부족하다고 느껴진다면 반드시 꼼꼼하게 익히고 넘어가야 한다. 판별자가 딥러닝 모델과 거의 유사하기 때문이다. 판별자도 제대로 만들기 어렵다면 더욱 까다로운 생성자 혹은 판별자와 생성자 간 통신을 이해하기 어려울 것이다.

    GAN을 배우고 처음으로 맞닥드렸던 난관이 모드 붕괴였는데 아마 대부분 공통적으로 겪는 현상이 아닌가 싶다. 뒤에 이를 해결하기 위해서 딥러닝의 성능 개선 방법을 미리 익혀두는 것은 필수이며, 이를 확실히 알기 위해서는 딥러닝의 기초가 필수다. 또 이를 위해 PyTorch이나 Colab 실습 환경 사용법을 숙지해야 함은 말할 필요도 없다.

    이처럼 큰 집을 만들기 위해 초보자들도 쉽게 따라할 수 있도록 벽돌을 아래부터 하나씩 차곡차곡 쌓아올리는 구성이 인상적이었다.


  • 파트2 : GAN의 핵심
    먼저 GAN의 핵심 개념을 살펴보자.
    • MNIST 신경망이 아무 그림이나 Input으로 받아 0 ~ 9(10개)를 Output으로 내보내는 과정은 정보가 줄어드는 압축이라고 볼 수 있다. 이를 뒤집어 10개의 숫자를 입력하여 어떤 그림이 나오도록 확대하면 이미지를 만들어 낼 수 있을 것이다. 원핫 인코딩 벡터가 그 예인데, 대신 평균적인 같은 결과만 나온다는 것이 문제이다. 3을 넣으면 항상 똑같이 생긴 3 모양의 그림이 나오는 셈이다.

    • 여기에서 착안된 구조가 GAN이다. 책에서는 GAN의 핵심을 다음과 같이 3단계로 잘 정리하고 있다.

      • 1단계 : 실제 데이터로 판별기 학습. 레이블은 True(1).1단계_107p

      • 2단계 : 생성기가 만든 데이터로 판별기 학습. 레이블은 False(0).2단계_108p

      • 3단계 : 생성기 생성 및 훈련. 생성기의 결과를 판별기가 판단 후 오차 역전파법으로 생성기 가중치 업데이트. 단, 판별자의 가중치는 업데이트 하지 않음.3단계_108p

    이어서 3개의 예제를 실습한다. 코드 구현을 통해 핵심 개념을 파악할 수 있음은 물론, GAN에서 겪게 되는 어려움인 모드 붕괴 등의 해결책을 익힐 수 있다.

    • 1010패턴
      [1,0,1,0]의 데이터를 입력받아 동일한 [1,0,1,0]을 생성하는 심플한 GAN을 만들어 본다.(엄밀히 1은 0.8 ~ 1.0의 임의의 수치를, 0은 0.0 ~ 0.2의 임의 수치를 의미한다.)

      비슷한 결과를 만들어내는 이 작업이 무슨 의미가 있냐 할 수 있겠지만 군더더기를 다 걷어냄으로써 핵심만 볼 수 있는 효과가 있는 매력적인 예제이다. 위의 3단계 핵심 개념에 맞춰 구현한 소스 코드는 아래와 같다. PyTorch답게 직관적이다.

          # 1단계 : 판별기 훈련(참 데이터)
          D.train(generate_real(), torch.FloatTensor([1.0]))
          # 2단계 : 판별기 훈련(거짓(생성기) 데이터)
          # D가 훈련되지 않도록 detach()로 계산 그래프에서 떼어내므로 자동 미분 불가
          # 생성기 인자가 0.5이므로 [1,0,1,0] 패턴은 등장하기 어렵다
          D.train(G.forward(torch.FloatTensor([0.5])).detach(), torch.FloarTensor([0.0]))
          # 3단계 : 생성기 훈련
          # D의 오차가 전달되어 G의 가중치를 갱신
          G.train(D, torch.FloatTensor([0.5]), torch.FloatTensor([1.0]))
      

      이 예제에서 또 하나의 눈여겨볼 점은 손실 그래프를 그리면 0.25 값이 나온다는 사실이다. G의 인자로 활용된 0.5가 평균제곱(MSE)되어 0.25가 되었기 때문이다.

    • MNIST
      이 예제의 핵심은 모드 붕괴이다. 아래 그림과 같이 생성기가 하나 혹은 일부 클래스만 만들게 되는 현상으로 아직도 연구가 진행중이다.

      모드붕괴_146p

      생성기가 판별기 성능을 앞선 후, 실제에 결과가 가깝게 나오는 꿀 지점을 발견하여 그 이미지를 계속 만들어 낸다는 것이 이를 설명하는 그럴듯한 이론이다.

      예제에서는 손실함수 및 활성화함수 변경, 정규화, 생성기 입력을 정규화 하고 늘리는 방법 등을 통해 모드 붕괴를 개선한다.

      또 눈여겨 볼 점은 G와 D의 균형점에서 BCELoss()의 값이 0.693 정도의 값으로 수렴하는 것이 이상적임을 설명해준다. 이는 이진 교차 엔트로피에서 예상되는 손실 ln(2)의 값으로 부록 “이상적인 손실값” 부분에서 보다 심도 있게 다룬다.

      더불어 입력 시드를 더할 경우 이미지가 겹쳐 보이는(예를 들면 : 3모양 + 5모양 = 겹치면 8 모양) 현상이 나타나지만, 뺄 경우 직관적으로 예측이 불가능한 결과를 보이는 연구도 언급한다.

      이처럼 난이도는 쉬운 반면 다루는 깊이는 논쟁이 되고 있는 연구에 이르고 있어 이 또한 책의 장점이라 할 수 있겠다.

    • 얼굴이미지 생성
      이 예제의 핵심은 RGB, HDF5, CUDA 활용이다. 그리고 드디어 Likelihood의 개념이 등장하기 시작한다. (재미있는 것은 저자분이 예제마다 운이 좋게도 테슬라 T4를 얻었다고 자랑하신다. 아무래도 코랩 Pro나 유료 서비스를 이용하시는 것 같은데 은근 귀여우심..ㅎㅎ)

      얼굴_189p


  • 파트3 : 합성곱과 조건부 GAN
    이 파트에서는 GAN의 품질을 조금 더 높힐 수 있는 방법들을 다룬다. CNN을 활용하는 DCGAN, 메모리 공간복잡도 측정법, GELU 활성화 함수가 소개된다.

    특히, CNN의 구조를 직관적으로 잘 설명하고 있고 - 왠만한 딥러닝만 집중으로 다루는 책보다 훨씬 낫다 - 부록에서는 CNN 네트워크 설계 방법과 관련된 Tip을 다루고 있다. 예전에 들었던 앤드루 응 교수님의 코세라 대표 강의 Deep Learning Specialization보다도 핵심을 더 잘 요약했다고 생각한다.부록_264p

    CNN의 적용한 결과 위 얼굴이미지 예제에 비해 윤곽선이 또렸해 졌음을 확인할 수 있다.CNN적용_222p

    이어서 조건부 GAN 파트에서는 레이블과 Input 관계를 학습하는 것에 초점을 맞춰 특정 레이블에만 조건부로 집중하여 품질을 향상시켜 본다.

    마지막으로 부록에서는 위에 언급한 것들을 제외하고도 GAN의 우도 학습이나, f = xy 같은 심플한 함수로 불안정한 학습과 경사학습법의 한계를 다룬다. GAN의 심화 단계로 넘어가기 위한 필수 개념들을 심플하게 잘 전달하고 있다.부록_268p


끝으로 대부분의 기술서들과 달리 열정만 있으면 실력이 없어도 익힐 수 있는 차별화된 장점을 갖춘 멋진 책이라는 점을 강조하며 리뷰를 마친다.




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
공유하기 북마크하기찜하기 thankstoThanksTo