차이를 확인하는 데이터 요약

먹고 싶은 거 먹어, 난 짜장

  • 범주형변수는 정해진 갑 중에서하나를 선택해야합니다. 짜장면과 짬뽕, 혹은 볶음밥 중에서 하나를 선택해야 하지 그 중간을 없습니다.
  • 짜장면, 짬뽕, 볶음밥과 같이 범주형 변수가 변수가 가질 수 있는 한정적인 값들을 수준(Level) 이라고 합니다.

동전던지기

  • 동전던지기를 예로 들어보겠습니다. 직접 동전을 하나 던졌다가 받은 뒤 앞면인지 뒷면인지 기록해봅시다. 반복 횟수는 10번이고 그림이 나오면 "앞" 숫자가 나오면 "뒤"라고 적습니다.
  • 한눈에 보기 좋게 정렬 개념을 활용해서 값들은 줄 세워 볼까요?


횟수

1

2

4

8

9

10

3

5

6

7

수준(앞/뒤)


  • 수준을 내림차순으로 정렬하고 나니 같은 값, 같은 수준을 가지는 관측치들끼리 나눠집니다.
  • 그럼 이제 10개 중에서 앞면이 몇번 나왔는지, 뒷면이 몇 번 나왔는지 손쉽게 셀 수 있습니다.
  • 표로 정리해보겠습니다.

수준앞면뒷면
횟수64


  • 표로 정리하고 나니 마치 관측치가 2개인 연속현 변수와 비슷하게 생겼습니다.
  • 전체 10개 중에서 앞면은 6번, 뒷면은 4번 나왔습니다.
  • 이론적으로 아주 공정한 상황이였다면 앞면이 5번, 뒷면도 5번 나왔겠지만, 제 동전 던지기에서는 앞면이 더 많이 나왔다는 것을 알 수 있습니다.
  • 지금은 수준이 "앞"과 "뒤" 2개밖에 없어서 숫자만 살펴봐도 변수를 파악할 수 있지만, 거주지역이나 연령대처럼 범주형변수의 수준 개수가 많으면 숫자만으로는 파악하기 힘듭니다.
  • 그래서 우리는 직관적으로 받아들일 수 있는 그림, 그래프를 활용해서 숫자를 표현하겠습니다.

파이차트와 막대그래프

  • 수준들이 원 모양의 파이 하나를 두고 각각의 비중에 따라 조각을 나눠 갖습니다.
  • 중심각의 크기로 전체 중에서 각 수준의 비중에 얼마만큼인지를 표현하는 것이죠.
  • 막대 그래프는 가끔 히스토그램이랑 헷갈리기도 하는데요. 히스토그램은 가로축에 연속형 변수가 들어와서 적절한 구간으로 나누는 중간 과정이 있습니다. 구간 간격을 어떻게 나누느냐에 따라 모양이 달리지기도 하고요.
  • 반면 막대그래프는 가로축에 범주형 변수가 들어오기 때문에 구간으로 나눌 필요가 없습니다.
  • 동전 데이터는 수준이 2개뿐이라서 어떤 그래프든 한눈에 결과를 확인 할 수 있지만, 수준의 수가 늘어나면 파이 차트보다는 막대그래프가 더 효율적입니다.
  • 막대 그래프는 수준이 늘어나도 막대만 추가하면 되지만, 파이 차트의 전체 각도는 360도로 고정되어 있고 수준의 수가 많을 수록 중신각이 잘게 쪼개져서 데이터를 한눈에 보기 어렵기 떄문이죠.


part 1

차이를 확인하는 데이터 요약

물수능과 불수능

  • 100 점이 모두 똑같은 100점은 아닙니다. 100점보다 나은 80점이 있을 수도 있죠.
  • 평균과 표준편차를 활용해서 표준점수라고 하는 상대적인 점수를 만들었습니다.

표준화

  • 물수능 학번 학생과 불수능 학번 학생은 항상 티격태격 댑니다. 대부분 절대적인 점수가 낮은 불수능 쪽이 투덜대곤 하죠.
  • 불수능 80점이 물수능 100점보다 낫다는 겁니다. 둘이서 다시 수능을 치면 좋겠지만, 현실적으로 어렵습니다.
  • 서로 다른 시험에서 얻은 점수를 비교해서 어느쪽이 상대적으로 더 잘한 것인지 확인할 수 있는 방법이 없을까요? 이 질문에 대한 해답은 바로 표준화(Standardization) 입니다.
  • 어떤 변수든지 원래 값에서 평균을 뺀 새로운 변수를 만들고 그 평균을 구하면 정확히 0이 나옵니다. 이제 두 점수는 상대적인 차이가 없습니다. 이렇게 각 관측치에서 평균을 빼는 과정을 중심화(Centering) 라고 합니다.
  • 각 관측치를 표준편차로 나누는 것을 척도화(Scaling) 라고합니다.
  • 중심화를 통해서 단순이 값이 크가 작다가 아니라 평균에 비해서 얼마나 크고 작은지를 확인합니다. 그 다음 척도화를 통해서 단위 차이를 없앤 숫자를 만들어 냅니다.
  • 이렇게 계산된 값들은 평균도, 단위도 상관없이 '표준적인 차이'를 의미합니다.
  • 어떤 변수를 가져오든 상관없이 표준화를 거친 변수의 평균은 0이 되고 표준편차는 1이 됩니다.

표준화 예제

  • 그럼 2011년에 80점을 받은 학생과 2015년에 100점을 받은 학생 중에서 어느 쪽이 상대적으로 잘한 것일까요? 앞서 살펴본 표준화롤 계산을 해봅시다.
2011년 = 80점 - 47.8점 / 19.7점 = 1.63 2015년 = 100점 - 55.4점 / 28.5점 = 1.56
  • 시험이 어려우면 어려울수록 점수는 하양평준화됩니다.
  • 대부분은 낮은 점수대를 형성하고 일부의 고득점자가 생기죠. 그래서 2011년의 평균점수는 47.8점으로 매누 낮고, 표준편차고 19.8점으로 낮습니다.
  • 즉, 2011년의 80점은 중심에서 오른쪽으로 1.63만큼 떨어져 있고, 2015년의 100점은 중심에서 오른쪽으로 1.56만큼 떨어져 있네요.따라서 2011년의 80점이 2015년의 100점 보다 상대적으로 더 낫네요!
  • 실제 수능애서는 이렇게 계산된 값에 20을 곱하고 100을 더해서 표준점수를 계산 합니다.
  • 그럼 평균은 0에서 100으로 바뀌고, 표준편차는 1에서 20배 늘어난 20이 됩니다.
  • 예를 들어, 2011년 수리가형에서 80점을 받은 학생의 표준 점수는 133점(100 + 1.63 * 20 = 132.6)이 됩니다.


part 1

차이를 확인하는 데이터 요약

더치페이와 N빵

평균

  • 어떤 변수의 합계가 고정되어 있을 때 모든 관측치가 똑같이 나눠 가질 수 있는 값을 평균(Mean) 이라고 합니다.

  • x위에 "모두 같다"라는 의미로 바(-)를 얹어 표현합니다.
  • 우리에게 너무나 익숙한 평균속에는 모든 사람이 평등하거나 모든 사람들에게 공평하다는 개념이 들어 있습니다.
  • 그러나 평균을 계산하는 순간 역설적이게도 불공평한 현실을 깨닫게 됩니다.
  • 키가 170cm인 남자는 대한민국 성인 남성의 평균 키가 174cm라는 것을 아는 순간 시무룩해집니다.
  • 시험에서 60점을 받아서 눈물이 나다가도 평균 점수가 30점이라는 것을 알게 되면 입가에 미소가 번지겠죠?
  • 이처럼 평균을 계싼하는 순간, 데이터 속에 있던 차이가 보입니다.

분산

  • 분산은 관측치들이 평균에서 평균적으로 얼마나 떨어져 있는지를 계산합니다.

  • 1단계 각각의 관측치에서 평균을 뺍니다. 평균으로부터 얼마나 차이가 나는지를 계산합니다.

  • 2단계 1단계에서 계산한 값을 제곱합니다.

  • 3단계 2단계까지는 i번째 관측치 하나에 대한 계산이였는데 3단계에서는 모든 n개 관측치에 대해서 똑같은 계산을 하고, 그 결과를 모두 더합니다. 분산이 한 변수의 특징을 설명하는 것이 아니라 모든 변수의 특징을 설명하는 것이니 모든 관측치를 다 활용하는 것이죠.

  • 4단계 3단계에서 구한 합계를 n-1로 나눕니다. 깐깐한 통계한자들이 n이 아니라 n-1로 나누는게 더 좋다는 것을 밝혀버려서 n-1로 나누게 됐지만, 관측치가 많으면 n으로 나누는 것과 큰 차이가 없습니다.


  • 물론 어려운 제곱 말고 절댓값을 쓸 수도 있습니다.

  • 부호를 없애는 데는 절대값이 제일 간단하지만 이론적으로는 '미분이 가능한' 분산을 더 선호합니다.

  • 물론 현실적인 이유도 있습니다. 평균에서 100명이 100원씩 차이를 보이는 것과 2명이 5,000원의 차이를 보이는 것 모두 절댓값으로는 10,000원이라는 같은 차이를 보입니다.

100 * 100원 = 2 * 5,000원 = 10,000원
  • 그렇지만 두 번째의 경우가 좀 더 불평등하지 않나요? 분산에 사용된 제곱합을 계산하면 다른 결과가 나옵니다.
100*(100원)제곱 = 1,000,000원 제곱 < 2 * (5,000)제곱 = 50,000,000원 제곱


표준편차

  • 그러나 분산은 치명적인 단점이 있습니다. 바로 단위(unit)입니다.
  • 평균이 만원이라는 것은 쉽게 이해되지만 5,875,000(원제곱)이라는 큰 숫자의 분산은 납득이 어렵습니다.
  • 큰 숫자도 문제지만 더 큰 문제는 원제곱입니다. 우리가 사는 세상 어디서도 원제곱을 쓰는 곳은 없습니다.
  • 통계학자가 차이를 설명하기 위해서 만든어 낸 단위죠.
  • 어쩔 수 없이 그대로 써야 할까요? 아니 제곱근으로 해결할 수 있습니다.
5,875,000(원제곱)의 제곱근 = 2,424원
  • 마법처럼 단위가 원제곱에서 원으로 돌아오고 엄청나게 크던 숫자도 뭔가 납득한 만한 수준으로 줄어들었습니다.
  • 분산에 제곱근을 씌워서 단위 문제를 해결한 이 숫자를 표준편차(Standard deviation) 라고합니다.
  • 표준편차가 클수록 관측치들이 평균으로부터 더 멀리 떨어져 있다는 뜻이죠.
  • 두 값의 의미는 크게 다르지 않지만, 표준편차가 훨씬 덜 부담스럽습니다.








part 1

차이를 확인하는 데이터 요약

순서대로 한줄서기

정렬과 순서 통계량

  • 크기에 따라 순서대로 줄 세우는 과정을 정렬이라고 합니다.
  • 오름차순으로 정렬된 값을 통계학에서는 순서통계량(order statistics) 이라고 부릅니다.
  • 그리고 그중에서 가장 먼저 나오는 값, 즉 가장 작은 값을 최솟값(Minimum), 가장 나중에 나오는 값, 즉 가장 큰 값을 최대값(Maxsimun) 이라고 특별한 이름을 지어줬습니다.

분위수

  • 경쟁에서는 점수가 중요한 것이 아니라 위치가 중요합니다.
  • 내 점수를 기준으로 나보다 점수가 낮은 사람들과 높은 사람들로 나뉘는 데요. 이렇게 기준이 되는 특정한 점수들을 분위수(Quantile) 라고 합니다.
  • 가장 대표적인 분위수가 100등분 기준, 기호 %를 사용하는 백분위수(Percentile) 입니다.
  • 최솟값은 0% 지점이 되고, 최대값은 모든 관측치가 최대값보다 작으니 100% 지점이 됩니다.

사분위수와 다섯 숫자 요약

  • 분위수를 데이터 분석에 어떻게 활용해야 할까요?
  • 50% 지점에 있는 값을 기준으로 관측치들이 정확히 반반으로 나뉘기 떄문에 중앙값(Median) 이라는 이름을 붙여줍니다.
  • 0%, 25%, 50%, 75%, 100% 로 총 5개의 지점을 만듭니다. 이 5개의 지점은 데이터를 정확히 4등분 합니다.
  • 그래서 사분위수(Quartile)라는 특별한 이름을 지어줬습니다.
  • 이처럼 하나의 연속형 변수로 최솟값, Q1, 중앙값, Q3, 최대값이라는 숫자 다섯 개를 계산하고 의미를 찾는 과정을 다섯 숫자 요약(Five number summary) 이라고 합니다.

상자그림

  • 구간의 갈이가 모두 똑같지 않습니다. 똑같이 25명씩 들어가 있지만 길이가 긴 구간이 있고 상대적으로 짧은 구간도 있습니다.
  • 구간이 널찎하면 관측치가 드문드문 퍼져 있다는 뜻이고 구간이 좁으면 관측치가 빽빽하게 들어 있따는 뜻이죠.
  • 관측치가 빽빽하다, -> 경쟁이 치열하다.

히스토그램

  • 히스토그램은 상자그림과 달리 먼저 구간을 적절히 나눕니다. 그리고 각 구간에 포함되는 관측치가 몇 개나 있는지 개수를 세어 도수분포표(Frequency distribution table)를 만들고, 이 표를 그림으로 표현합니다.
  • 가령 75~85점의 중상위권에 연습생들이 많이 몰려 있고 85점 이상의 고득점 연습생 수가 적다는 걸 알 수 있습니다.


Part 1

차이를 확인하는 데이터 요약

줌 아웃

  • 데이터 속에 정보가 있다고 무작정 파고들어서는 안 됩니다.
  • 나무를 보기 전에 숲은 보는게 먼저죠.
  • 데이터는 나무 한 구루 한 그루가 모여 만들어진 큰 숲과 같습니다.
  • 데이터 분석은 나무들의 특징을 살펴보는 과장이고요.
  • 데이터 분석을 위해서는 먼저 가장 높은 곳에 올라가 숲 전체를 살펴봐야합니다.
  • 크고 복잡한 데이터도 멀리서 바라보면 몇가지 특징을 확인할 수 있습니다. 다만 특징을 말로 설명하는 것이 아니라 통계를 활용해서 모두 숫자로 표현합니다.
  • 데이터의 특징을 숫자로 표현하는 과정을 요약이라고 합니다.
  • 이번 파트에서는 데이터들을 잘 요약하기 위해서 어떤 숫자들을 계산하는지 살펴보겠습니다.

날줄과 씨줄(날줄:세로방향에 놓인실, 씨줄:가로방향으로 놓인실)

|이름|성별|몸무게| |김철수|여|48| |이영희|남|80|
  • 이 데이터는 관심 대상 2명에 대한 이름, 성별, 몸무게라는 3가지 관심 특징을 가지고 있습니다. 그렇다면 이 2명은 바교할수 있을까요? 물론입니다. 누가 몸무게가 많이 나가는지. 누가 남자고 여잔지 바로 알수 있죠.

  • 일을 오래 했는지는 알수 없습니다. 비교를 할 수 없으면 차이를 확인할 수 없고 차이를 확인할 수 없으면 데이터 분석은 의미가 없습니다. 그래서 관심 대상을 바라보는 관점을 고정하는 과정이 필요합니다.

데이터의 구성

  • 행(가로줄)에는 각각의 관측 대상에 대해 변수별로 측정된 값이 입력되기 때문에 흔히 행을 관측치 혹은 관측 개체 라고 합니다.

데이터와 데이터 공간

  • 관측치는 변수들이 만드는 공간 속에 들어가는 하나의 점일 뿐 공간의 크기에는 영향을 미치지 않습니다. 그래서 변수가 하나라도 늘어나면 분석이 복잡해지지만, 관측치는 몇 개가 더 늘어난다고 해서 분석 과정이 크게 달라지지 않습니다.

  • 그리고 데이터 분석은 결국 변수들이 만들어 내는 공간의 특징을 설명하고 그 속에 점처럼 흩어져 있는 관측치의 패턴을 찾는 과정이라고 표현할 수 있습니다.

  • 통계는 많은 사람이 만들어 내는 패펀, 큰 그림에서 의미를 찾아냅니다. 키라는 변수를 하나 선택하면 그 속에 100만명의 키가 들어가 있습니다. 그중에 키가 큰 사람도 있고 작은 사람도 있죠. 이 키를 살펴보면 가장 키가 큰 사람은 얼마나 큰지. 작은 사람은 또 얼마나 작은지, 중간 정도 되는 사람의 키는 얼마인지, 키가 190cm인 사람은 키가 얼마나 큰지 등 다양한 차이를 확인할 수 있습니다.

  • 데이터 분석은 데이터를 변수 단위로 나눠서 분석하거나 변수 관계를 살펴보는 것으로 시작됩니다.

알파벳을 활용한 예제 데이터의 표현

  • 변수의 개수 p, 관측치의 개수 n
  • 데이터의 크기 n * p
  • 변수 x
  • 관측치, 아래 첨자 알파벳(괄호 표현) x = [x(1), x(2), x(3), x(4), x(5)]
  • 합계 (시그마)

기술통계량과 변수 요약

  • 통계에서는 변수의 특징을 설명하기 위해 한 줄(열)의 데이터에 다양한 연산을 사용해 계산을 하는데, 이 계산된 숫자들을 통계량(Statistic)이라고 부릅니다.

  • 특히 데이터의 특징을 설명하는 통계량을 기술통계량(Descriptive statistics)이라고 합니다.

  • 최솟값, 최대값, 중앙값, 분산 등이 모두 대표적인 기술 통계량입니다.

  • 몸무게 처럼 한없이 다영한 연속형(Continuous) 변수

  • 성별처럼 관측치들이 정해진 몇개의 값 중에서 하나의 값을 가지는 변주형(Categorical)변수는 값이 같은 관측치들을 묶어 개수를 셉니다.



치킨 뜯고 공부하자 100일 프로젝트 대망의 첫날

이포스팅은 루비출판사에서 진행하는 공부하고 치킨 먹는 프로젝트의 후원을 받습니다.^^ http://m.post.naver.com/viewer/postView.nhn?volumeNo=12359301&memberNo=38315694&vType=VERTICAL

머릿말

part1

머릿말. 데이터 분석을 배우기 위해서 우리는 어디서부터 시작해야 할까요?

  • 아무리 복장합 데이터 분석도 목적과 과정을 살펴보면 어떤 차이를 확인하고 설명하려 합니다.
  • 통계학은 차이를 수학이라는 도구로 풀어냅니다.

프롤로그

  1. 문법보다 회화
  2. 차이를 이하해기 위한 통계
    • 진짜 목표는 데이터 속에 있는 차이는 확인하고 설명하는 것.
  3. 불확실성을 설명하는 통계
  4. 과거와 현재, 미래가 소통하는 언어

목차

PART 1 차이를 확인하는 데이터 요약

  1. 줌아웃
  2. 날줄과 씨줄
    • 데이터의 구성, 데이터와 데이터 공간
    • 알파벳을 활용한 예제 데이터의 표현, 기술 통계량과 변수 요약
  3. 순서대로 한줄서기
    • 정렬과 순서 통계량, 분위수, 사분위수와 다섯 숫자 요약, 상자그림, 히스토그램
  4. 더치페이와 N빵
    • 평균, 분산, 표준편차
  5. 물수능과 불수능
    • 표준화, 표준화 예제
  6. 먹고 싶은거 먹어, 난짜장
    • 동전던지기, 파이차트와 막대 그래프
  7. 0.000012%의 꿈, 로또
    • 확률, 확률을 활용한 당첨 번호 예측, 데이터 분석과 확률

PART 2 차이를 설명하는 통계 개념

  1. 범인은 이 안에 있다.
  2. 부전자전, 유전 연결고리
    • 산점도, 상관관계, 상관계수
  3. 40% 니가 하면 나도한다.
    • 교차표, 행, 백분율과 열 백분율, 열지도, 독립
  4. 최저가, 알고 보니 옵션가
    • 조건부 확룰과 심슨의 역설
  5. 아낌없이 주는 의사결정 나무
    • 모자이크 그림, 의사결정나무 모형
  6. 점심 뭐 먹지?
    • ABCDEF 테스트, 분산과 분산분석

PART 3 차이를 예측하는 통계 모형

  1. 우연과 운명 사이
  2. 지구는 우주의 티끌
    • 표본과 모집단 통계량과 분포, 자연스러운 확률
  3. 웬만해선 이길 수 없다.
    • 유의수준, 필요학과 같은 분포, 키의 히스토그램 정규분포
  4. 남자평균 174.9cm, 여자평균 162.3cm
    • 표본평균의 표준편차, 표본평균의 표준편차 계산, t-값과 t-분포
    • t-분포, p-값과 t-테스트
  5. 관계 검증을 위한 테스트
    • t-검정을 활용, 카이제곱분포를 활용한 독립성검정
    • F-분포를 활용한 분산분석
  6. 아빠 키유전 확률, 25%
    • 다시 한번 상관계수, 선형회귀모형, 부모 맘 같지 않은 자식

PART 4 데이터 분석 도구, R

  1. 그것이 R고싶다.
  2. R 시작하기
    • R설치, R Studio 설치, R Studio 실행
  3. 순서대로 살펴보는 BR31
  4. R로 분석 다시 보기
    • 하나의 연속형 변수를 요약하기, 하나의 변주형 변수를 요약하기
    • 두 개의 범주형 변수의 관계 찾기, 두개의 연속형 변수의 관계 찾기
    • 차이를 설명하는 간단한 통계 모형 살펴보기
  5. 대학만 가면 끝일 줄 알았는데


 logstash JDBC input plugin

상세한 내용은 도큐먼트 참고 : https://www.elastic.co/guide/en/logstash/5.2/plugins-inputs-jdbc.html
설명 : DB -> logstash 를 연동해주는 플러그인.
특이한 점 : 
- JDBC 드라이버 및 클래스 위치를 직접 지정해 주어야 한다.
- sql_last_value 값을 사용하여 추가적으로 생성되는 값을 업데이트 할 수 있다.  마지막 레코드의 특정 칼럼 값이나 마지막 작업 시간이 파일에 저장되어 logstash 수행시에 sql_last_value 변수 저장되어 statement에 사용될 수 있다. 
아쉬운점 : 
- 스케줄 지정 시 crontab 구문을 사용하는데, crontab 문법이 분/시/일/월/요일 방식으로 지정되기 때문에 초 단위 수행을 지정할 방법이 없다.(아직 찾지 못한 걸까?)
주의사항 : 페이징 작업 또는 레코드 업데이트시 stastement에 sql_last_value 조건을 주어야 한다. 처음에 알아서 변경분을 처리해 줄것을 기대하고 .... 삽질한 뒤 제대로 사용하게 되었다. 역시 도큐먼트를 읽고 또 읽는 작업은 중요하다.

주소 파라메터 및 설정 

input {
   jdbc {
        # JDBC driver 위치
        jdbc_driver_library => "/usr/share/java/mysql-connector-java-5.1.12.jar”

        # JDBC dricer class
        jdbc_driver_class => “com.mysql.jdbc.Driver”

        # db host & database
        jdbc_connection_string => "jdbc:mysql://{db_host}/{data_base}”

 # 한글 데이터 사용시

        # jdbc_connection_string => "jdbc:mysql://{db_host}/{data_base}?useUnicode=true&characterEncoding=utf8


        jdbc_pool_timeout => 3000
        jdbc_paging_enabled => true
        dbc_page_size => 100000
        jdbc_user => “{user}"
        jdbc_password => “{pass_word}”

        # 스케쥴 
        # linux crontab 문법을 따름
        # 매분 마다 실행 
        schedule => "* * * * *”
        # 데이터 트레킹을 위해 마지막 데이터 기록시 사용
        tracking_column_type => “numeric"

        # false 타임스탬프 사용, true 숫자 사용
        use_column_value => true

        # 트레킹에 사용할 컬럼
        tracking_column => id
        
        # 마지막 컬럼값 기록 여부, true시 0 또는 1970년 1월 1일 부터 시작된다.
        # clean_run => false
        
        # 인코딩
        charset => "UTF-8"
     
        # 쿼리
        # sql_last_value는 마지막 레코드 중 설정된 필드값(기본값 시간)
        # sql_last_value 사용해서 마지막 값만 가져올수 있도록 SQL 명령어를 짜야한다.
        statement => " SELECT id, name, c_date FROM elk_jdbc_test WHERE id > :sql_last_value "

 # sql_last_value 값 저장 경로. 기본값은 "~/.logstash_jdbc_last_run"
 last_run_metadata_path => “{last_run_path}"
    }
}

filter {

}

output {
     amazon_es {
          hosts => [“{host}"]
          region => "ap-northeast-1"
          index => "elk_jdbc_test"
     }
}



평가

머신러닝을 이용하여 모델 구현 후 결과가 좋은 모델인지 평가 하기 위해 각 모형이 얼마나 좋은 지 말해주는 점수가 필요하다.

대표적으로는 프리시즌(Precision)리콜(recall)이 있다.


프리시즌(Precision) - 정밀도

  • 정의 : Positive라 예측한 사례 중 TruePostive 비율
  • 점수 구하는 공식 : TruePositive / ( TruePositive + FalsePsitive )




리콜(Recall) - 재현율

  • 정의 : True라 예측한 사례 중 TruePositive 비율 
  • 점수 구하는 공식 : TruePositive / ( TruePositive + TrueNegative )




에러


  • ErrorType1 : 실제로는 False인데 Positive로 예측한 사례

  • ErrorType2 : 실제로는 True인데 Negative로 예측한 사례

  • 경우에 따라 ErrorType 1, 2 중 더 치명적인 Error가 다를 수 있음


예)

  • ErrorType1이 더 치명 적인 경우 : 중고 자동차를 구입 할때 좋은 자동차라 예측하고 구매하였지만 좋지 않은 자동차였을 경우. (좋은 중고 자동차를 나쁘다 판단하여 안사면 손해는 없지만 나쁜 중고자동차를 좋다고 판단하여 구매하면 손해가 크다)

  • ErrorType2가 더 치면 적인 경우 : 암 진단시 건강한 사람이라고 예측 하였는데 암 환자인경우

  • 예시에서 볼 수 있듯이 경우에 따라 적절한 평가 지표를 사용해야 한다.

  • 프리시즌과 리콜 외에도 Accuracy, Kappa 등의 지표가 있다.


'생활데이타 > 머신러닝' 카테고리의 다른 글

추천시스템(recommandation system)  (0) 2016.08.01

1. 협업 필터링

- 도메인 지식 필요없음

- 제품 종류가 많아 추천이 잘된다.

2. 컨텐츠 기반

- 도메인 지식 필요 

- 다양한 메타데이타 (구성하기 어려울 수 있음)


3. 협업필터링 + 컨텐츠기반

4. 차원 축소

5. 평가 방식

- 정확도 (평점 예측)

- 만족도 (클릭율, 구매율)




결론 : 일반적인 이야기

 카디날리티 집계(Cardinality Aggregation)?

엘라스틱서치 에서 제공하는 approximation aggregation으로 필드에서 고유한 값의 대략적인 개수를 계산한다.

 

HyperLogLog++(HLL) algorithm (확률적 자료구조 기반 알고리즘)

엘라스텍서치의 cardinality 는 HLL 알고리즘을 기반한다.

(wiki : https://en.wikipedia.org/wiki/HyperLogLog)


HLL 알고리즘의 특징 : 

  • 정확도(precision) 설정 가능
    단, 정확도를 올릴 수록, 메모리 사용량이 증가
  • cardinality가 낮은 집합일 수록 정확도가 높아진다.
  • 메모리 사용량이 고정적
  • 메모리 사용량은 정확도에 비례

정확도 설정

  • precision_threshold (0 ~ 40,000)
  • 일반적으로 cardinality가 precision 보다 적다면 거의 항상 100% 정확
  • 메모시 사용률 =  precision_threshold * 8 bytes

 그래프.1 threshold 에 따른 에러율 


 

성능 향상을 위한 방안

  • cardinality 대상 필드를 hash 로 정의한다.
  • 단 cardinality 가 크거나 string 인 경우만 효과적이다.

좀 더 자세히 


'생활데이타 > ElasticSearch' 카테고리의 다른 글

[logstash] JDBC input plugin  (0) 2017.03.31
[ElasticSearch] 검색/집계 (Aggregation)  (0) 2016.06.05

+ Recent posts