베이즈 추정은 때로 직감에 크게 반한다

객관적인 데이터를 사용할 때 주의할 점

암에 걸려있을 확률을 계산해보자

  • 객관적인 데이터를 이용해 생각하는 베이즈 추정으로 인해 거꾸로 오해에 빠지기 쉬울 수 있다는 것을 이해해야 한다
  • 의료 검사 결과 '○○병에 걸렸다/걸리지 않았다'라는 결과가 나왔다면 결과 옳은지 어떻게 판단해야 할까?
  • 예를 들어 '특정 암에 걸려 있다면 $95\%$의 확률로 양성이 나오는 검사'를 받은 결과 양성 판정이 나왔다고 하면 암에 걸려있을 확률이 $95\%$라고 판단해야 할까?
    • 정답은 '아니오'이다
    • '양성'이라는 결과로 부터 '암이다'라는 원인으로 거슬러 올라가는 추정이기에 전형적인 베이즈 추정의 예이다

베이즈 추정을 위한 예제

어느 특정 암에 걸릴 확률을 $0.1\%(0.001)$이라고 하자. 이 암에 걸렸는지를 진단하는 간이 검사가 있는데, 이 암에 걸려 있는 사람은 $95\%(0.95)$의 확률로 양성 진단을 받는다고 한다. 한편 건강한 사람이 양성으로 오진을 받은 확률은 $2\%(0.02)$이다. 그렇다면 이 검사에서 양성이라고 진단받았을 때 당신이 이 암에 걸려 있을 확률은 얼마나 될까?



1. 의료 데이터를 근거로 '사전 확률' 계산하기

  • 사전 확률 : 병에 걸려있는지에 대한 정보를 얻기 전의 확률
    • 암에 걸릴 확률 : $\mathsf{Pr}(\textrm{암에 걸릴 확률})=0.001(0.1\%)$
      • 암에 걸릴 확률이 $0.001$이기 때문에 검사를 받는 사람이 암에 걸려있을 확률을 $0.001$이라고 추정할 수 있다
    • 건강한 사람 : $\mathsf{Pr}(\textrm{건강한 사람})=1-\mathsf{Pr}(\textrm{암에 걸릴 사람})=1-0.001=0.999(99.9\%)$
      • 암에 걸지지 않을 확률이 $0.999$이기 때문에 검사를 받는 사람이 암에 걸리지 않고 건강한 확률은 $0.999$이라고 추정할 수 있다


2. 검사의 정밀도를 근거로 '조건부 확률' 구하기

  • 조건부 확률 : 병에 걸려있는지에 대한 정보를 얻은 후의 확률
    • 검사 결과로 나오는 '양성' 또는 '음성'이 정보에 해당된다
  • 검사 정밀도에 따른 조건부 확률은 다음과 같다
    • 이 검사는 완벽하지 않으며 오진의 위험이 있다는 것을 염두에 두어야 한다
    • 오진의 위험은 2가지
      • False Negatiive(위음성) : '암에 걸려있는 사람임에도 불구하고 암이 아니라고 진단하는 것'
      • False Positive(위양성) : '암이 걸리지 않은 건강한 사람임에도 불구하고 암이라고 진단하는 것'

종류

양성일 확률

음성일 확률

 합계

암에 걸린 환자

$0.95$

$0.05$

$1.0$

 건강한 사람

 $0.02$

$0.98$

$1.0$

 합계

 $0.97$

$1.03$

 


  • 위의 확률은 종류를 한정한 상태에서 각 검사 결과에 대한 조건부 확률로 그림으로 나타내면 다음과 같다
    • 원인 : 종류(암에 걸린 환자 또는 건강한 사람)
    • 결과 : 원인을 알고 있을 때 검사 결과의 확률


3. 검사 결과가 '양성'인 경우만 살펴보면 되기에 '음성'인 경우는 제외한다

  • 간이 검사의 결과로 '양성' 판정을 받은 상태이다
    • 즉, 검사 결과에 대한 '정보'를 관측하여 추가적인 정보를 얻은 상태
  • 검사 결과인 '음성'에 대한 정보는 제외하면 다음 그림처럼 나타낼 수 있다


  • 위의 2가지 경우에 대하여 정규화 조건을 만족하도록 만든다
    • 암이면서 양성인 경우와 건강하면서 양성인 경우를 합하면 $0.095\% + 1.998\% = 2.093\%$이기 때문에 다음과 같이 식을 정리할 수 있다
\begin{eqnarray} 0.095 : 1.998 &=& \frac{0.095}{2.093} : \frac{1.998}{2.093}\\ &\approx& 0.0454 : 0.9546 \end{eqnarray}

  • 따라서 최종적인 베이즈 사후 확률은 다음과 같다
\begin{eqnarray} \mathsf{Pr}(\textrm{검사 결과 양성} \mapsto \textrm{암에 걸린 사람}) &=& \frac{0.095}{2.093} &\approx& 0.0453893932154802\end{eqnarray}


4. 베이즈 추정 과정 정리

  1. 암인가 건강한가에 대한 사전 확률을 계산(역학 데이터 이용)
  2. 검사의 정밀도에 대한 조건부 확률을 계산(치료 데이터 이용)
  3. 검사 결과를 관측
  4. 음성일 가능성 제외
  5. 암과 건강에 대한 확률의 정규화
  6. 암일 사후 확률(베이즈 역확률)

5. 사후 확률을 통해 알 수 있는 것은?

  • 처음 문제였던 '$95\%$ 정밀도를 가진 암 검사에서 양성이 나온다면 $95\%$의 확률로 암인가?'에 대한 답은 부정적(0.045389)이다
  • 베이즈 사후 확률을 통해 $95\%$가 아니라 $4.5389\%$ 밖에 되지 않는다는 것을 알 수 있다
  • 사후 확률이 낮은 이유는?
    • 원래 암에 걸린 사람 자체가 드물다
    • 건강한 사람이 압도적으로 많을 뿐만아니라 건강한 사람을 '양성'으로 진단하는 사례 또한 무시할 수 없을 만큼 많다
  • 건강한데도 오진으로 '양성'이 나왔을 가능성이 압도적으로 높기 때문에 과도한 비관은 금물이지만 완전히 마음을 놓아도 될까?
    • 전혀 아니다
  • 사전 확률과 사후 확률의 갱신 과정은 다음과 같다
    1. 사전 확률 : $\mathsf{Pr}(\textrm{암에 걸렸을 확률})=0.001$
    2. 정보 획득 : 검사 결과 '양성'으로 판정
    3. 사후 확률 : $\mathsf{Pr}(\textrm{검사 결과 양성} \mapsto \textrm{암에 걸렸을 확률})\approx 0.045$
    • 아무런 정보가 없을 때 암에 걸렸을 확률은 $0.001$이었지만 검사 결과를 통한 정보('양성')를 근거로 사후 확률을 계산하면 약 $0.045$가 되어 약 $45$배가 증가했다는 것을 알 수 있다
    • 검사 결과를 보기 전에는 약 $1000$명 중에 $1$명 정도로 암에 걸린다고 추정하였지만 검사에서 양성이 나온 상태에서는 약 $20$명 중에 $1$명 꼴로 가능성이 높아졌기에 방치해도 되는 상태라고 볼 수 없다




연습 문제

  • 인플루엔자 유행 시기에 고열로 병원에 온 환자 중 인플루엔자에 걸린 환자의 비율이 $0.7$, 감기에 걸린 환자의 비율이 $0.3$이라고 하자. 인플루엔자 간이 키트로 검사했더니 '양성'과 '음성'의 비율은 다음 표와 같았다

종류

양성일 확률

음성일 확률

 합계

인플루엔자

$0.8$

$0.2$

$1.0$

인플루엔자가 아님

 $0.1$

$0.9$

$1.0$

 합계

 $0.9$

$1.1$

 


  • 이 때 인플루엔자 간이 키트 검사에서 양성이 나온 경우 인플루엔자일 확률, 음성으로 나온 경우 인플루엔자가 아닐 확률을 구하시오


1. 사전 확률 계산

  • 사전 확률 : 인플루엔자에 걸려있는지에 대한 정보를 얻기 전의 확률
    • 인플루엔자 환자일 확률 : $\mathsf{Pr}(\textrm{인플루엔자 환자})=0.7(70\%)$
    • 감기 환자일 확률 : $\mathsf{Pr}(\textrm{감기 환자})=1-\mathsf{Pr}(\textrm{인플루엔자 환자})=1-0.7=0.3(30\%)$

2. 조건부 확률 계산

  • 조건부 확률 : 인플루엔자 간이 키트 검사 결과로 정보를 얻은 후의 확률
  • 인플루엔자 간이 키트 정밀도에 의한 조건부 확률
    • $\mathsf{Pr}(\textrm{인플루엔자 환자} \mapsto \textrm{양성}) = 0.8$
    • $\mathsf{Pr}(\textrm{인플루엔자 환자} \mapsto \textrm{음성}) = 0.2$
    • $\mathsf{Pr}(\textrm{감기 환자} \mapsto \textrm{양성}) = 0.1$
    • $\mathsf{Pr}(\textrm{감기 환자} \mapsto \textrm{음성}) = 0.9$
  • 위의 조건부 확률을 환자의 종류로 한정한 조건부 확률 계산
    • $\mathsf{Pr}(\textrm{양성} \mapsto \textrm{인플루엔자 환자}) = 0.7\times 0.8 = 0.56$
    • $\mathsf{Pr}(\textrm{음성} \mapsto \textrm{인플루엔자 환자}) = 0.7 \times 0.2 = 0.14$
    • $\mathsf{Pr}(\textrm{양성} \mapsto \textrm{감기 환자}) = 0.3 \times 0.1 = 0.03$
    • $\mathsf{Pr}(\textrm{음성} \mapsto \textrm{감기 환자}) = 0.3 \times 0.9 = 0.27 $

3. '양성'인 인플루엔자 환자일 계산 : '음성'인 경우 제외하기

  • 검사 결과가 '음성'인 경우를 제외하면 다음과 같다
    • $\mathsf{Pr}(\textrm{양성} \mapsto \textrm{인플루엔자 환자}) = 0.7\times 0.8 = 0.56$
    • $\mathsf{Pr}(\textrm{양성} \mapsto \textrm{감기 환자}) = 0.3 \times 0.1 = 0.03$
  • 위의 두 식에 대하여 정규화 조건을 만족하도록 식을 변형하자
\begin{eqnarray} \mathsf{Pr}(\textrm{양성} \mapsto \textrm{인플루엔자 환자}) : \mathsf{Pr}(\textrm{양성} \mapsto \textrm{감기 환자}) &=& 0.56 : 0.03 \\ &=& \frac{0.56}{0.56+0.03} : \frac{0.03}{0.56+0.03}\\ &=&\frac{0.56}{0.59} : \frac{0.03}{0.59} \\ &=& \frac{56}{59}:\frac{3}{59}\end{eqnarray}

  • 베이즈 사후 확률
$$\mathsf{Pr}(\textrm{양성} \mapsto \textrm{인플루엔자 환자}) = \frac{56}{59} \approx 0.9491525423728814$$


4. '음성'인 인플루엔자 환자일 계산 : '양성'인 경우 제외하기

  • 검사 결과가 '음성'인 경우를 제외하면 다음과 같다
    • $\mathsf{Pr}(\textrm{음성} \mapsto \textrm{인플루엔자 환자}) = 0.7 \times 0.2 = 0.14$
    • $\mathsf{Pr}(\textrm{음성} \mapsto \textrm{감기 환자}) = 0.3 \times 0.9 = 0.27 $
  • 위의 두 식에 대하여 정규화 조건을 만족하도록 식을 변형하자
\begin{eqnarray} \mathsf{Pr}(\textrm{음성} \mapsto \textrm{인플루엔자 환자}) : \mathsf{Pr}(\textrm{음성} \mapsto \textrm{감기 환자}) &=& 0.14 : 0.27 \\ &=& \frac{0.14}{0.14+0.27} : \frac{0.27}{0.14+0.27}\\ &=&\frac{0.14}{0.41} : \frac{0.27}{0.41}\\ &=& \frac{14}{41} : \frac{27}{41}\end{eqnarray}

  • 베이즈 사후 확률
$$\mathsf{Pr}(\textrm{음성} \mapsto \textrm{인플루엔자 환자}) = \frac{14}{41} \approx 0.3414634146341463$$





출처 : 세상에서 가장 쉬운 베이트 통계학 입문

정보를 얻으면 확률이 바뀐다!

베이즈 추정으로 '구매 고객'과 '비구매 고객'을 판별하기

1단계 : 경험을 통해 '사전 확률'을 설정

  • 베이즈 통계학에서의 사전 확률(prior probability)
    • 사전(事前) : 어떤 정보가 들어오기 전을 의미
    • 정보를 통해 우리가 원하는 결과에 대한 판단을 할 수 있음
  • 사전 확률의 예
    • 고객의 행동을 관측하기 이전의 상태에서의 고객의 종류('구매 고객'과 '비구매 고객')를 구별하는 비율(확률)
  • 정보의 예
    • '고객이 말을 걸었다'는 것과 같은 추가적인 상황을 의미
    • '말을 걸었다'는 정보를 통해 고객의 종류에 대해 추측(판단)을 할 수 있게 됨
  • 사전 확률 설정하기
    • 사전 확률은 보통 경험에 근거해 설정
    • 고객의 종류에 대하여 비율(확률)을 수치화 해보자
    • 경험상 손님 5명 중 1명이 '구매 고객'이라면 '구매 고객'일 사전 확률은 $\mathsf{Pr}(\textrm{구매 고객})=0.2(20\%)$
      • '비구매 고객'일 사전 확률은 $\mathsf{Pr}(\textrm{비구매 고객})=1-0.2=0.8(80\%)$
      • 정규화(normalization) 조건 : 확률의 전체 합은 항상 $1$
    • 사전 분포(prior distribution) : 고객의 행동을 관측하기 이전의 시점에서 할당한 수치(비율)



2단계 : 고객의 종류별로 '말거는 행동'을 하는 '조건부 확률'을 설정

  • 경험이나 실험 등을 통해, 즉 통계적인 자료에 근거하여 다음과 같이 조건부 확률을 설정
    • 가로축의 합은 항상 $1$로 정규화 조건을 만족
    • 세로축의 합은 $1$이 아닐 수 있다!
      • 다른 종류의 고객에 대한 행동을 나타내고 있는 것이지 행동 전체를 표현하는 것이 아니다

고객의 종류

 말을 걸 확률

말을 걸지 않을 확률

 합계

 구매 고객

$0.9$

$0.1$

$1.0$

 비구매 고객

 $0.3$

$0.7$

$1.0$

 합계

 $1.2$

$8.8$

 



  • 조건부 확률을 수식과 그림으로 표현하면 다음과 같다
    • $\mathsf{Pr}(\textrm{말을 걸다} | \textrm{구매 고객})= \mathsf{Pr}(\textrm{구매 고객} \mapsto \textrm{말을 걸다}) = 0.9$
    • $\mathsf{Pr}(\textrm{말을 걸지 않다} | \textrm{구매 고객})= \mathsf{Pr}(\textrm{구매 고객} \mapsto \textrm{말을 걸지 않다})=0.1$
    • $\mathsf{Pr}(\textrm{말을 걸다} | \textrm{비구매 고객})= \mathsf{Pr}(\textrm{비구매 고객} \mapsto \textrm{말을 걸다})=0.3$
    • $\mathsf{Pr}(\textrm{말을 걸지 않다} | \textrm{비구매 고객})= \mathsf{Pr}(\textrm{비구매 고객} \mapsto \textrm{말을 걸지 않다})=0.7$



  • 위 그림에서 각각의 영역에 대한 확률은 아래 그림과 같이 계산할 수 있다.
    • 전체 영역의 확률값을 계산하면 $\mathrm{A}+\mathrm{B}+\mathrm{C}+\mathrm{D}=0.18+0.02+0.24+0.56=1$이다.


3단계 : 관측한 행동에서 '가능성이 없는 상황'을 제외한다

  • 이제 '고객이 말을 걸었다'는 상황에서 어떤 고객인지 추정을 해보자.
  • '고객이 말을 걸었다'는 것은 고객의 행동 한 가지를 관측해 추가적인 정보를 얻게 된 것이다.
  • 이 상황에서는 '고객이 말을 걸지 않는다'는 가능성은 없어졌다.
  • 따라서 이제 우리가 생각할 수 있는 경우는 위 그림에서 A 또는 C의 상황 뿐이기에 둘 중의 하나만 추정하면 된다.
  • 즉 '고객이 말을 걸은 경우' 대상 고객은 '구매를 한다' 또는 '구매하지 않는다' 2가지의 경우로 처음에 생각했던 4가지 상황에서 2가지 상황으로 줄어든다
  • 이로 인하여 우리의 추정에 대한 확률이 변하게 된다


4단계 : 정규화 과정을 통해 '구매 고객'에 대한 사후 확률을 계산한다

  • '고객이 말을 걸었다'는 행동을 관측한 상황이기에 A(구매 고객이 말을 건다) 또는 C(비구매 고객이 말을 건다)의 상황만이 남게 되었다
  • 이제 A와 C의 상황만 남게되었기에 A와 C의 확률을 계산해 합이 $1$이 되도록 정규화를 해야 한다
  • A와 C의 비율을 정리해 합이 $1$이 되도록 정리하면 확률을 구할 수 있게 된다

\begin{eqnarray}\mathrm{A}:\mathrm{C} &=& 0.18:0.24 \\ &=& 3:4 \\ &=& \frac{3}{7}:\frac{4}{7}\end{eqnarray}

  • 이제 앞에서 구한 조건부 확률에 대한 반대의 상황, 즉 '말을 건 고객이 구매할 확률'은 다음과 같이 추정할 수 있다.
\begin{eqnarray}\mathsf{Pr}(\textrm{말을 걸다} \mapsto \textrm{구매 고객}) = \frac{3}{7}\end{eqnarray}
  • 어떤 정보가 주어진 이후의 상황에 대한 확률을 베이즈 통계학에서 사후 확률(posterior probability) 또는 베이즈 역확률(Bayesian inverse probability)이라고 한다
    • '역확률'에서 '역'이라는 말의 의미는 지금까지 생각해왔던 상황과는 반대로 생각한다는 것
    • 고객이 어떤 행동(말을 걸거나 걸지 않는다)을 확률적으로 선택한다고 생각하고서 해석해 확률을 계산했다
    • 즉 어떤 원인(고객)으로 부터 결과(고객의 행동)가 일어난다고 해석한 것이다
    • 그러니 베이즈 통계학에서는 결과로부터 원인을 추론하는 것이기 때문에 '역'이라는 말을 사용하는 것이다
  • 말을 건 고객이 구매할 사후 확률이 $\frac{3}{7}=0.428\ldots$이지만 행동을 관측하지 않은 상태에서의 고객이 구매할 사전 확률은 $0.2$이다. 따라서 정보가 주어진 경우의 사후 확률이 정보가 주어지지 않은 사전 확률에 비해 2배가 넘게 높아진다는 것을 알 수 있다. 이렇게 확률이 높아지는 것을 베이즈 갱신(Bayesian update)라고 한다

이와 같은 과정을 통해 추론하는 것을 베이즈 추정(Bayesian inference)라고 한다

  • 베이즈 추정은 '사전 확률을 추가적인 정보를 통해 사후 확률로 베이즈 갱신하는 것'이라고 할 수 있다
  • 이러한 추정 방법 전체를 한데 묶어 베이즈 통계학(Bayesian statistics)라고 한다



출처 : 세상에서 가장 쉬운 베이트 통계학 입문

XOR을 신경망으로 분류해보자


XOR 데이터


Logistic Regression 모델

import numpy as np
import tensorflow as tf

x_data = np.array([[0, 0],
                   [0, 1],
                   [1, 0],
                   [1, 1]], dtype=np.float32)

y_data = np.array([[0],
                   [1],
                   [1], [0]], dtype=np.float32)

X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
W = tf.Variable(tf.random_normal([2, 1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')

hypothesis = tf.sigmoid(tf.matmul(X, W) + b)

cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))
train = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(cost)

# 모델의 정확도 계산
# hypothesis > 0 이면 참, 아니면 거짓)
predicted = tf.cast(hypothesis > 0.5, dtype=tf.float32)
accuracy = tf.reduce_mean(tf.cast(tf.equal(predicted, Y), dtype=tf.float32))

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

    for step in range(10001):
        sess.run(train, feed_dict={X: x_data, Y: y_data})
        if step % 1000 == 0:
            print(f'step = {step:06}, cost : {sess.run(cost, feed_dict={X: x_data, Y: y_data})}, '
                  f'weight : {tf.squeeze(sess.run(W)).eval(session=sess)}')

    h, c, a = sess.run([hypothesis, predicted, accuracy], feed_dict={X: x_data, Y: y_data})
    print(f'Hypothesis : {tf.squeeze(h).eval(session=sess)}')
    print(f'Correct : {tf.squeeze(c).eval(session=sess)}')
    print(f'Accuracy : {a*100:.6}%')
step = 000000, cost : 0.8311277627944946, weight : [-0.59255368  2.05449486]
step = 001000, cost : 0.6931628584861755, weight : [ 0.01237938  0.01779066]
step = 002000, cost : 0.6931471824645996, weight : [ 0.00029095  0.0003012 ]
step = 003000, cost : 0.6931471824645996, weight : [  5.78627623e-06   5.79754351e-06]
step = 004000, cost : 0.6931471824645996, weight : [  1.32766417e-07   1.32112120e-07]
step = 005000, cost : 0.6931471824645996, weight : [  1.32766417e-07   1.32112120e-07]
step = 006000, cost : 0.6931471824645996, weight : [  1.32766417e-07   1.32112120e-07]
step = 007000, cost : 0.6931471824645996, weight : [  1.32766417e-07   1.32112120e-07]
step = 008000, cost : 0.6931471824645996, weight : [  1.32766417e-07   1.32112120e-07]
step = 009000, cost : 0.6931471824645996, weight : [  1.32766417e-07   1.32112120e-07]
step = 010000, cost : 0.6931471824645996, weight : [  1.32766417e-07   1.32112120e-07]
Hypothesis : [ 0.5  0.5  0.5  0.5]
Correct : [ 0.  0.  0.  0.]
Accuracy : 50.0%


Neural Network 모델

import numpy as np
import tensorflow as tf

x_data = np.array([[0, 0],
                   [0, 1],
                   [1, 0],
                   [1, 1]], dtype=np.float32)

y_data = np.array([[0],
                   [1],
                   [1], [0]], dtype=np.float32)

X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)

# Neural Network 적용
W1 = tf.Variable(tf.random_normal([2, 1]), name='weight1')
b1 = tf.Variable(tf.random_normal([2]), name='bias1')
layer1 = tf.sigmoid(tf.matmul(X, W1) + b1)

W2 = tf.Variable(tf.random_normal([2, 1]), name='weight2')
b2 = tf.Variable(tf.random_normal([1]), name='bias2')
hypothesis = tf.sigmoid(tf.matmul(layer1, W2) + b2)

cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))
train = tf.train.GradientDescentOptimizer(learning_rate=0.1).minimize(cost)

# 모델의 정확도 계산
# hypothesis > 0 이면 참, 아니면 거짓)
predicted = tf.cast(hypothesis > 0.5, dtype=tf.float32)
accuracy = tf.reduce_mean(tf.cast(tf.equal(predicted, Y), dtype=tf.float32))

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

    for step in range(10001):
        sess.run(train, feed_dict={X: x_data, Y: y_data})
        if step % 1000 == 0:
            print(f'step = {step:06}, cost : {sess.run(cost, feed_dict={X: x_data, Y: y_data}):.10}, '
                  f'weight : {tf.squeeze(sess.run(W1)).eval(session=sess)}, '
                  f'{tf.squeeze(sess.run(W2)).eval(session=sess)}')

    h, c, a = sess.run([hypothesis, predicted, accuracy], feed_dict={X: x_data, Y: y_data})
    print(f'Hypothesis : {tf.squeeze(h).eval(session=sess)}')
    print(f'Correct : {tf.squeeze(c).eval(session=sess)}')
    print(f'Accuracy : {a*100:.6}%')
step = 000000, cost : 0.6963943839, weight : [ 0.37977377 -0.03527401], [-0.2952694  -0.10899331]
step = 001000, cost : 0.6927730441, weight : [ 0.42299902 -0.20793314], [-0.39537558 -0.13621624]
step = 002000, cost : 0.6917776465, weight : [ 0.57296711 -0.44276038], [-0.50253206 -0.09007944]
step = 003000, cost : 0.6853944063, weight : [ 0.98696107 -0.93629724], [-0.83750314  0.06653196]
step = 004000, cost : 0.4990587234, weight : [ 2.54613757 -2.89969301], [-2.36907244  1.84388542]
step = 005000, cost : 0.1204189509, weight : [ 4.94409466 -5.14697409], [-5.11362267  5.43273211]
step = 006000, cost : 0.05705790967, weight : [ 5.75085926 -5.89725971], [-6.50368214  6.9214716 ]
step = 007000, cost : 0.03641526401, weight : [ 6.16756582 -6.2878871 ], [-7.34480333  7.78554535]
step = 008000, cost : 0.02652502432, weight : [ 6.43835545 -6.54318571], [-7.94078159  8.3894968 ]
step = 009000, cost : 0.02078646049, weight : [ 6.63547897 -6.72984171], [-8.4005928   8.85260773]
step = 010000, cost : 0.01705784164, weight : [ 6.78890705 -6.87561798], [-8.77430153  9.2277565 ]
Hypothesis : [ 0.01516829  0.97779286  0.98493963  0.01519784]
Correct : [ 0.  1.  1.  0.]
Accuracy : 100.0%


Neural Network에서 neural(=weight)를 늘리려면?



  • weight 변수를 지정할 때, shape의 모양을 변경하면 된다
    • 가설식의 계산값이 더 정확해진다!
W1 = tf.Variable(tf.random_normal([2, 10]), name='weight1')
b1 = tf.Variable(tf.random_normal([10]), name='bias1')
layer1 = tf.sigmoid(tf.matmul(X, W1) + b1)

W2 = tf.Variable(tf.random_normal([10, 1]), name='weight2')
b2 = tf.Variable(tf.random_normal([1]), name='bias2')
hypothesis = tf.sigmoid(tf.matmul(layer1, W2) + b2)
Hypothesis : [ 0.00381555  0.99342114  0.99458128  0.00839256]
Correct : [ 0.  1.  1.  0.]
Accuracy : 100.0%


Deep Neural Network

  • 신경망의 층을 더 깊게 만들기 위해서는 layer를 늘려주면 된다
  • 신경망을 4개로 만들어 보면, 모델이 더욱 최적화되는 것을 알 수 있다
W1 = tf.Variable(tf.random_normal([2, 10]), name='weight1')
b1 = tf.Variable(tf.random_normal([10]), name='bias1')
layer1 = tf.sigmoid(tf.matmul(X, W1) + b1)

W2 = tf.Variable(tf.random_normal([10, 10]), name='weight2')
b2 = tf.Variable(tf.random_normal([10]), name='bias2')
layer2 = tf.sigmoid(tf.matmul(layer1, W2) + b2)

W3 = tf.Variable(tf.random_normal([10, 10]), name='weight2')
b3 = tf.Variable(tf.random_normal([10]), name='bias2')
layer3 = tf.sigmoid(tf.matmul(layer2, W3) + b3)

W4 = tf.Variable(tf.random_normal([10, 1]), name='weight2')
b4 = tf.Variable(tf.random_normal([1]), name='bias2')
hypothesis = tf.sigmoid(tf.matmul(layer3, W4) + b4)
Hypothesis : [ 0.0014578   0.99773043  0.99896216  0.00163728]
Correct : [ 0.  1.  1.  0.]
Accuracy : 100.0%


Neural Nets for XOR

하나의 회귀분석 모델로는 XOR의 값을 구분할 수 없다

  • 1개의 신경망 모델로는 XOR의 값을 구분할 수 없다는 것이 수학적으로 증명됨
    • 많은 사람들이 신경망으로는 잘 안된다고 믿는 계기가 됨
  • 그러나 신경망 모델을 조합하면 XOR을 구분할 수 있다는 것이 발견됨


  • 초창기 Marvin Minsky 교수는 뉴런을 학습시킬 수 있는 방법이 없다고 하였음


신경망을 사용해 XOR 값 구분하기

  • XOR은 선형으로 구분하는 것이 불가능하다
  • 다음과 같은 방법으로 XOR 값 구분이 가능하다


  • 위의 그림에 나온 weight와 bias에 대하여 XOR 값을 계산해보자
    • \(x_1=0, x_2=0\)일 때
  • \(x_1=0, x_2=1\)일 때

  • \(x_1=1, x_2=0\)일 때

  • \(x_1=1, x_2=1\)일 때


Forward Propagation

  • 앞에서 여러 개로 구성한 신경망을 하나로 합쳐서 구성하면 다음과 같다
  • 이런 신경망 모델에서 XOR을 구분할 수 있는 다양한 weight와 bias 값이 존재하는 것을 알 수 있다
  • 입력값을 weight와 bias로 계산하여 출력값을 계산하는 방식이 forward propagation이다
  • 또한 위의 모델은 우리가 앞에서 봐왔던 multinomial classification 모델과 유사하여 같은 방법을 사용할 수 있다

  • 2개의 weight과 bias를 하나로 묶어 수식으로 표현하면 다음과 같다

\begin{eqnarray}K(\mathbb{x}) &=& \textrm{sigmoid}(\mathbb{x}\mathbb{w}_1+\mathbb{b}_1)\\\bar{Y} &=& H(\mathbb{x})\\ &=& \textrm{sigmoid}(K(\mathbb{x})\mathbb{w}_2+\mathbb{b}_2)\end{eqnarray}


  • 위의 수식을 tensorflow에서는 다음과 같이 구현할 수 있다
K = tf.sigmoid(tf.matmul(X, W1) + b1)
hypothesis = tf.sigmoid(tf.matmul(K, W2) + b2)

  • 남은 문제는 weight와 bias를 어떻게 update 시킬 것인가?


신경망 모델 학습시키기

  • 지금까지 해왔던 것처럼 Gradient Descent Algorithm을 사용하여 weight와 bias를 학습시킬 수 있다


  • cost를 최소화시키는 weight와 bias를 찾는다
  • cost를 최소화시키는 값을 찾기 위해서는 GDA 알고리즘의 미분값을 계산할 수 있어야 한다
  • 그러나 아래 그림에서 각각의 weight가 \(\bar{Y}\)에 영향을 미치는 값(미분값)을 알아야 각 weight를 조절할 수 있다
  • 각각의 미분값을 계산하기 위한 계산량이 너무나 많다!


Backpropagation

  • 계산량이 많아지는 것을 해결하기 위한 방법이 Paul Werbos와 Hinton에 의해 발견됨
    • forward propagation 방법으로 계산한 값과 실제의 값을 비교한 후 오차를 반영하여 weight와 bias를 조절하는 방법이 backpropagataion


  • 일반적인 신경망 모델을 \(f=wx + b\)라 할 때, \(g=wx\)라고 하면 \(f=g + b\)가 되는데, 이를 신경망 모델 그래프로 나타내면 다음과 같다


  • 위 그래프에서 우리가 하고 싶은 것은 \(w\)와 \(x\), \(b\) 각각이 \(f\)에 미치는 영향으로 이는 함수 \(f\)에 대한 각각의 편미분 값을 구하는 것과 같다


  • Forward Progration 계산
    •  입력값에 대하여 random하게 선택한 weight와 bias를 사용하여 \(f\)를 계산하는 것은 쉽다!

  • Back Propagation 계산
    • 신경망 모델식에서 간단한 미분값은 미리 계산해 놓을 수 있다
\begin{eqnarray}\frac{\partial g}{\partial w} &=& x \\\\ \frac{\partial g}{\partial x} &=& w \\\\ \frac{\partial f}{\partial g} &=& 1 \\\\ \frac{\partial f}{\partial b} &=& 1 \end{eqnarray}

    • \(x=5, w=-2, b=3\)일 때, 이제 우리가 원하는 \(\frac{\partial f}{\partial w}\)와 \(\frac{\partial f}{\partial x}\), \(\frac{\partial f}{\partial b}\)는 chain rule을 이용하여 다음과 같이 구할 수 있다
      • 이미 각각의 미분값이 계산되어 있어 쉽게 계산이 가능하다!
\begin{eqnarray}\frac{\partial f}{\partial w} &=& \frac{\partial f}{\partial g} \cdot \frac{\partial g}{\partial w} \\ &=&1 \times 5 \\ &=& 5 \\\\\frac{\partial f}{\partial x} &=& \frac{\partial f}{\partial g} \cdot \frac{\partial g}{\partial x} \\ &=& 1 \times x \\ &=&1 \times -2 \\ &=& -2 \\\\\frac{\partial f}{\partial b} &=& 1 \end{eqnarray}



    • 신경망을 확장한 경우에서 chain rule을 이용하면 \(\frac{\partial f}{\partial x}\)와 \(\frac{\partial f}{\partial y}\)를 쉽게 구할 수 있다


  • tensorflow에서 신경망 모델을 tensorboard에서 graph 형태로 만든 이유는 chain rule을 이용, back propagation을 쉽게 구하기 위함이다



Shape, Rank, Axis


Tensor의 Shape와 Rank

>>> import tensorflow as tf
>>> sess = tf.Session()

>>> t1 = tf.constant([1, 2, 3, 4])

>>> tf.shape(t1).eval(session=sess)
array([4])

>>> tf.rank(t1).eval(session=sess)
1


>>> t2 = tf.constant([[1 ,2],
>>>                   [3, 4]])

>>> tf.shape(t2).eval(session=sess)
array([2, 2])

>>> tf.rank(t2).eval(session=sess)
2


>>> t3 = tf.constant([
                      [
                       [
                        [ 1,  2,  3,  4],
                        [ 5,  6,  7,  8],
                        [ 9, 10, 11, 12]
                       ], 
                       [
                        [13, 14, 15, 16],
                        [17, 18, 19, 20],
                        [21, 22, 23, 24]
                       ]
                      ]
                     ]) 
>>> tf.shape(t3).eval(session=sess)
array([1, 2, 3, 4])

>>> tf.rank(t3).eval(session=sess)
4



Tensor에서 matmul() 함수와 multiply() 함수의 차이

  • matmul() 함수
>>> import tensorflow as tf
>>> sess = tf.Session()

>>> matrix1 = tf.constant([
                           [1, 2],
                           [3, 4]
                          ])
>>> matrix2 = tf.constant([
                           [1],
                           [2]
                          ])
>>> matrix3 = tf.constant([[1, 2]])

>>> print(f'Matrix 1\'s shape is {matrix1.shape}')
Matrix 1's shape is (2, 2)


>>> print(f'Matrix 2\'s shape is {matrix2.shape}')
Matrix 2's shape is (2, 1)

>>> print(f'Matrix 2\'s shape is {matrix3.shape}')
Matrix 2's shape is (1, 2)

>>> print(tf.matmul(matrix1, matrix2).eval(session=sess))
[[ 5]
 [11]]

>>> print(tf.matmul(matrix3, matrix1).eval(session=sess))
[[ 7 10]]

>>> print(tf.matmul(matrix1, matrix2).eval(session=sess))
[[1 2]
 [2 4]]

>>> print(tf.matmul(matrix1, matrix3).eval(session=sess))
ValueError: Dimensions must be equal, but are 2 and 1 for 'MatMul_3' (op: 'MatMul') with input shapes: [2,2], [1,2].


  • multiply() 함수
    • broadcasting된 후 계산
>>> print(tf.multiply(matrix1, matrix2).eval(session=sess))
[[1 2]
 [6 8]]

>>> print(tf.multiply(matrix3, matrix1).eval(session=sess))
[[1 4]
 [3 8]]

>>> print(tf.multiply(matrix1, matrix2).eval(session=sess))
[[1 2]
 [2 4]]

>>> print(tf.multiply(matrix1, matrix3).eval(session=sess))
[[1 4]
 [3 8]]


reduce_mean() 함수

>>> import tensorflow as tf
>>> sess = tf.Session()


>>> t1 = tf.constant([1., 2.])
>>> t2 = tf.constant([[1., 2.],
                      [3., 4.]])

>>> print(tf.reduce_mean(t1).eval(session=sess))
1.5

>>> print(tf.reduce_mean(t1, axis=0).eval(session=sess))
1.5

>>> print(tf.reduce_mean(t2).eval(session=sess))
2.5

>>> print(tf.reduce_mean(t2, axis=0).eval(session=sess))
[2.  3.]

>>> print(tf.reduce_mean(t2, axis=1).eval(session=sess))
[1.5  3.5]

>>> print(tf.reduce_mean(t2, axis=-1).eval(session=sess))
[1.5  3.5]



reduce_sum() 함수

>>> import tensorflow as tf
>>> sess = tf.Session()

>>> t = tf.constant([[1., 2.],
                     [3., 4.]])

>>> print(tf.reduce_sum(t).eval(session=sess))
10.0

>>> print(tf.reduce_sum(t, axis=0).eval(session=sess))
[4.  6.]

>>> print(tf.reduce_sum(t, axis=1).eval(session=sess))
[3.  7.]

>>> print(tf.reduce_mean(tf.reduce_sum(t, axis=0)).eval(session=sess))
5.0

>>> print(tf.reduce_mean(tf.reduce_sum(t, axis=1)).eval(session=sess))
5.0


argmax() 함수와 argmin() 함수

  • argmax() 함수는 배열 중에서 가장 큰 원소의 index를 반환
  • argmin() 함수는 배열 중에서 가장 작은 원소의 index를 반환
>>> import tensorflow as tf
>>> sess = tf.Session()

>>> t = tf.constant([[1., 4., 5., 6.],
                     [3., 2., 6., 6.]])

>>> print(tf.argmax(t).eval(session=sess))
[1 0 1 0]

>>> print(tf.argmax(t, axis=0).eval(session=sess))
[1 0 1 0]

>>> print(tf.argmax(t, axis=1).eval(session=sess))
[3 2]

>>> print(tf.argmin(t, axis=0).eval(session=sess))
[0 1 0 0]

>>> print(tf.argmin(t, axis=1).eval(session=sess))
[0 1]


reshape() 함수

  • 매개변수 -1은 나누어 떨어지는 숫자로 대치한다는 의미
>>> import tensorflow as tf
>>> sess = tf.Session()

>>> t = tf.constant([[1., 4., 5., 6.],
                     [3., 2., 6., 6.]])

>>> print(t.shape)
(2, 2, 3)

>>> # x행 3열의 행렬로 변환(x = 12 / 3 = 4)
>>> print(tf.reshape(t, shape=[-1, 3]).eval(session=sess))
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]

>>> # x행 2열의 행렬이 3개로 중첩된 3차원 행렬로 변환(x = 12 / 3 / 2 = 2)
>>> print(tf.reshape(t, shape=[3, 2, -1]).eval(session=sess))
[[[ 1  2]
  [ 3  4]]

 [[ 5  6]
  [ 7  8]]

 [[ 9 10]
  [11 12]]]

squeeze() 함수

  • tensor의 dimension을 하나 줄임
>>> import tensorflow as tf
>>> sess = tf.Session()

>>> t = tf.constant([[1], [2], [3]])
>>> print(tf.rank(t).eval(session=sess))
2

>>> s = tf.squeeze(t)
>>> print(s.eval(session=sess))
[1 2 3]

>>> print(tf.rank(s).eval(session=sess))
1

expaned_dims() 함수

  • tensor의 dimension을 하나 늘임
>>> import tensorflow as tf
>>> sess = tf.Session()

>>> t = tf.constant([1, 2, 3, 4])

>>> print(tf.rank(t).eval(session=sess))
1

>>> s = tf.expand_dims(t, axis=0)
>>> print(s.eval(session=sess))
[[1 2 3 4]]

>>> print(tf.rank(s).eval(session=sess))
2

>>> s = tf.expand_dims(t, axis=1)
>>> print(s.eval(session=sess))
[[1]
 [2]
 [3]
 [4]]

>>> print(tf.rank(s).eval(session=sess))
2

one_hot() 함수

  • tensor의 원소값에 해당하는 index의 값만 1이고 나머지는 0인 tensor로 변환
    • 매개변수 depth는 만들고자 하는 tensor의 shape 중 가장 마지막 요소의 값
>>> import tensorflow as tf
>>> sess = tf.Session()

>>> t = tf.constant([[1], [0], [2], [1], [3]])

>>> s = tf.one_hot(t, depth=4)
>>> print(s.eval(session=sess))
[[[ 0.  1.  0.  0.]]

 [[ 1.  0.  0.  0.]]

 [[ 0.  0.  1.  0.]]

 [[ 0.  1.  0.  0.]]

 [[ 0.  0.  0.  1.]]]

>>> print(tf.shape(s).eval(session=sess))
[5 1 4]

>>> s = tf.one_hot(t, depth=6)
>>> print(s.eval(session=sess))
[[[ 0.  1.  0.  0.  0.  0.]]

 [[ 1.  0.  0.  0.  0.  0.]]

 [[ 0.  0.  1.  0.  0.  0.]]

 [[ 0.  1.  0.  0.  0.  0.]]

 [[ 0.  0.  0.  1.  0.  0.]]]

>>> print(tf.shape(s).eval(session=sess))
[5 1 6]
 


가정 및 개인 생활 분야

  1. 위치 예측

    • Nokia
      • 노키아는 휴대폰 추적을 통해서 미래의 사용자 위치를 예측하는 콘테스트를 주최하였다. 이를 통해 얻은 방법론들은 부분적으로 사용자 친구들의 행위(예를 들면 한 사람이 통화하는 사회적 접촉 대상자들)을 분석에 포함시켜서 스위스의 특정 지역에 거주하는 사람들에 대해서 평균적으로 그들이 어디에 있게 될 것인지를 하루 전에 20미터 범위 내에서 예측할 수 있다.
    • Microsoft
      • GPS 데이터에 근거하여 한 사람이 몇 년 후에 어디에 있게 될 것인지를 정확하게 예측하는 기술을 개발하는데 예측 분석을 활용하였다.
  2. 우정 예측

    • Facebook
      • 당신이 알고 있을 가능성이 있는 사람들 및 연결하고 싶어할 가능성이 있는 사람들을 정확하게 추천하는 방법론을 개선하기 위한 콘테스트를 후원하였다.
    • LinkedIn
      • 당신이 알고 있을 가능성이 있는 사람들을 예측하여 추천하는 서비스가 '자신들이 만든 것들 중에서 가장 중요한 데이터 제품'이라고
  3. 사랑 예측

    • Match.com
      • 온라인 데이트에서 '지능적 소개팅(Intelligent Matching)'은 당신이 교류하고 싶어할 가능성이 높은 상대를 예측한다.
    • OKCupid
      • 온라인 데이트에서 어떠한 메시지가 상대방으로부터 반응을 얻을 가능성이 가장 높은지를 예측한다.
  4. 임신 예측

    • Target 쇼핑몰
      • 쇼핑 행태로부터 고객의 임신을 예측함으로써 30%나 더 많은 대상자를 찾아내어 신생아 부모의 구매욕구에 호소할 수 있는 할인쿠폰을 보낸다.
  5. 불륜 예측

    • 모 대학 연구진
      • 불륜행각은 인구사회학적 특징보다는 형태 특징에 의해서 더 정확하게 예측된다는 것을 보여주었다. 물론 유전적 요소도 영향을 준다고 하였다.
  6. 이혼 예측

    • 모 병원 연구진
      • 90% 정확도를 가지고 이혼을 예측한다.
  7. 사망 예측

    • 보험, 의료, 범죄 소탕 및 안전 분야



마케팅, 광고, 웹 분야

  1. (타겟 마케팅을 위하여) 구매 행위 예측

    • PREMIER Bankcard
      • 1,200만 달러의 우편 홍보물 비용을 절감하였다.
    • First Tennessee Bank
      • 우편 홍보물 비용은 20% 절감하고 반응률은 3.1% 증가하여 예측 분석에 투자된 비용 대비 600% 수익을 창출하였다.
    • Target
      • 예측 분석을 통해 매출액이 15~30% 증가하였다.
    • Harbor Sweets
      • 구매한 지 오래된 고객들을 다시 오게 만들기 위해서 데이터 분석을 통해 타깃을 선정하였는데 40%라는 놀라운 반응률을 보였다.
    • Fingerhut
      • 타기팅으로 우편 홍보물을 20% 줄여서 연간 거의 300만 달러를 절감하면서도 수익은 오히려 더 늘어났다.
    • Vermont Country Store
      • 판매 카달로그 발송 대상을 보다 정확하게 타기팅함으로써 데이터 분석에 투자한 비용 대비 11배가 넘는 수익률을 거두었다.
    • Harrah's Las Vegas
      • 이 카지노 업체는 각각의 고객들이 장기적으로 얼마나 지출할 것인지를 예측하였다.(이를 고객의 '평생가치'라고 부르기도 하였다.)
    • Cox Communications
      • 구매 경향으로 예측함으로써 우편 홍보물에 대한 반응률이 3배 증가하였다. 특히 가정용 TV, 인터넷, 이동통신 서비스 등과 같은 커뮤니케이션 관련 제품들에 대한 요구를 예측함으로써 연간 수익률이 50%에 이르게 되었다.
    • 뮤추얼 펀드 투자관리 회사
      • 평균적인 개인보다 추가적인 투자를 할 가능성이 5배나 더 높은 고객들을 선별해 내었다.
    • 영국의 한 수퍼마켓
      • 고객들 중 19%에 대해서 그 고객이 재방문할 날짜를 정확하게 예측할 수 있었으며, 그들이 지출할 금액에 대해서 10달러 이상 차이나지 않게 정확하게 예측할 수 있었다.
    • Elie Tahari
      • 여성 패션라인 제품에 대한 수요를 예측하였다.
  2. (고객 유지를 위하여) 구매 취소 행위 예측

    • PREMIER Bankcard
      • 고객 예치금 800만 달러를 이탈하지 않고 계속 보관하게 만들었다.
    • FedEx
      • 어느 고객이 경쟁업체로 넘어갈 것인가를 65~90% 정확도로 예측하였다.
    • 호주 Optus
      • 이동통신 서비스의 평균 가입자보다 서비스 해지 가능성이 10배나 높은 고객을 선별해 내었다.
    • Sprint
      • 유선전화 서비스의 평균 가입자보다 서비스 해지 가능성이 3배나 높은 고객을 선별해 내었다.
    • 노르웨이 Telenor
      • 이동통신 서비스 가입자의 이탈률을 36% 감소시켰으며, 고객유치 비용 대비 수익은 11배 높아졌다.
    • 뉴질랜드 2degrees
      • 이동통신 서비스의 평균 가입자보다 서비스 해지 가능성이 12배나 높은 고객을 선별해 내었다.
    • Lloyds TSB
      • 고객 이탈에 대한 예측 모델링을 개선함으로써 연간 이익이 800만 파운드나 증가하였다.
    • Chase Bank
      • 부동산 담보대출 조기 상환 고객을 선별해 내었다.
    • Reed Elsevier
      • 잡지의 구독갱신률이 16% 증가하였다.
  3. (거래 우선순위 선정을 위하여) 세일즈 성공 가능성 예측

    • IBM
      • IBM 캐나다 법인은 세일즈를 위해 계획한 이벤트에 응할 참가자 목표를 83% 신뢰도를 가지고 예측하였다. 즉 '우리가 이 파티를 주최한다면 사람들이 충분히 참가할 것인가?'를 예측한 것이다. 여기에는 IBM 예측 분석 솔루션의 세일즈도 포함되어 있으므로 예측 분석을 팔기 위해서 예측 분석을 한 것이다.
    • HP
      • 세일즈 담당자들에게 판매 기회를 예견해 주는 조기 경보 시스템을 구축하여 95%의 정확도로 세일즈 노력의 결과 중 92%를 예측하였다. 또한 전체 60%의 딜에 대해서 최종 결과까지 걸리는 시간을 예측하였다.
    • Bella Pictures
      • 웨딩사진 촬영 예약판매를 위해서 예비신부를 타겟팅하였다.
    • PayChex
      • 급여 및 인력관리 서비스 제공업체인 이 회사는 영업 목적의 전화통화 중 성공 가능성이 적은 통화를 예측 선별함으로써 전체 영업 목적의 통화수를 40% 감소시킴과 동시에 전체 세일즈를 늘릴 수 있었다.
    • Sun Microsystems
      • 전화 영업 성공률은 2배나 향상시켰다.
  4. (개인 맞춤화된 추천을 위하여) 제품 선택 예측

    • Amazon.com
      • 제품 추천을 통한 매출이 전체 매출의 35%를 차지한다.
    • Netflix
      • 영화 추천 능력 개선을 위한 100만 달러 상금의 콘테스트를 주최하였다. 넷플릭스 가입자들이 선택하는 영화 중 약 70%는 온라인 추천에 의한 것이라고 한다.
    • 영국 Tesco
      • 13개국에 걸친 마트 계산대에서 연간 1억 장의 개인맞춤화된 쿠폰을 발급한다. 예측 모델링은 그 이전의 다른 방법론들과 비교할 때 쿠폰 사용률을 3.6배나 증가시켰다.
    • Target
      • 제품 선별 추천 모델을 사용한 타기팅 우편홍보물로 매출이 15~20% 증가하였다.
    • U.S. Bank
      • 반응률이 2배 향상되었으며 투자 대비 교차판매 수익률이 5배 증가하였다.
    • Pandora
      • 400가지의 음악적 특성에 근거하여 음악을 추천한다.
  5. (보여줄 콘텐츠를 선별하기 위하여) 마우스 클릭 예측

    • Google
      • 사용자에게 검색 결과로 보여질 웹페이지들 중 어떤 것이 사용자의 고품질 요구에 더 부합하는가를 예측함으로써 검색 기능을 향상시켰다.
    • 교육 관련 한 포털
      • 사용자가 클릭할 가능성이 더 높은 고아고를 보여줌으로써 매  19개월마다 100만 달러의 매출을 추가로 창출하였다.
  6. (광고주에게 경고하기 위하여) 비효율적인 광고 예측

    • Google
      • 새로운 광고들 중에서 어떤 것이 더 많이 후회(bounce)하게 만드는가를 예측한다(즉, 사람들이 어떤 광고를 클릭한 후 즉시 이전 페이지로 다시 되돌아오는가를 분석한다).
  7. (노출 극대화를 위하여) 트윗 및 게시물의 구전 효과 예측

    • MTV
      • 비디오 뮤직 어워드 방송 시 해당 웹피이지의 페이지 뷰가 55% 증가하였다.
  8. (스팸 편지함에 자동으로 집어넣기 위하여) 스팸 메일 예측

    • Google
      • 2004년까지만 해도 상당히 높았던 Gmail의 스팸 메일 오인률(false positive rate)이 현재는 거의 무시해도 좋을 정도로 낮아졌다.
  9. 히트곡 및 히트 영화

    • 모 연구진
      • 머신 러닝을 이용해 어떤 시나리오 대본이 할리우드의 대박 영화가 될 것인지 그리고 어떤 노래가 음원 차트에서 히트를 칠 것인지를 예측하였다.



금융 리스크 및 보험 분야

  1. 자동차 충돌로 인한 신체 상해 예측

    • Allstate
      • 2012년에 개최된 예측 모델링 콘테스트를 통해서 보험 가입 차량의 특성들에 근거하여 신체 상해 부담금액의 예측 정확도를 3배나 향상시켰다.
  2. 고액의 산업재해 상해 예측

    • Accident Fund Insurance
      • 의료보허 가입자의 비용청구서 내용으로부터 2차적 건강 조건(예를 들면 비만이나 당뇨병 여부)을 확인한다. 이러한 조건들은 어떤 상해를 당했을 때 고액의 비용이 발생할지를 예측하게 해줌으로써 예를 들어 보험에 가입한 직원들 중 특정인에게 예방조치를 취하도록 할 것인지 여부를 판단할 수 있게 해준다.
  3. 보험 청구 예측

    • Infinity Insurance
      • 보험 청구 신청서 승인 및 거절에 활용
    • 유명한 국제상선보험사
      • 예측 모델을 이용하여 '손실률'을 0.5% 낮춤으로써 거의 5천만 달러를 절약할 수 있게 되었다.
  4. 사망 예측

    • 생명보함사들
      • 보험가입 승인 여부 및 보함납입액을 결정하기 위해서 사망 연령을 예측한다.
    • 상위 5위권에 드는 미국의 한 의료보험회사
      • 사망 예측은 의료보험의 일반적 영역에 포함되지 않는다. 이 사례의 본질은 의료 분야 참조
  5. 부동산 담보대출 조기상환 예측

    • Chase Bank
      • 어떤 주택소유자가 부동산 담보대출을 갈아타기(대환대출)하여 향후 지불할 이자를 모조리 경쟁 은행에 가져다줄지를 미리 알 수 있는 예측 모델을 사용하여 수억 달러의 이익을 창출하였다.
  6. 파산(리스크) 예측

    • Citigroup
      • 30년이 넘는 기간 동안의 국제적 채무불이행 사례들에 대한 분석을 활용하여 각 지역별로(북미 및 서유럽 지역에서는 더 세분하여 산업별로) 상업적 신용 리스크 모델들을 개발하였다. 은행 내부에서 이러한 모델을 이용한 담당자들이 3천 명에 이르며 이 모델들은 20년이 넘게 이용되었다.
    • Canadian Tire
      • 리스크 관리를 위해서 신용카드 지불 연체를 예측하였다.
    • PREMIER Bankcard
      • 연체율 및 대손상각비율을 낮출 수 있었으며 1천만 달러 이상의 수익을 올렸다.
  7. 청구서 체납 예측

    • Brasil Telecom(지금은 Oi로 개명)
      • 악성 체납을 예측하여 400만 달러를 회수하였다.
    • DTE Energy
      • 대손상각에 대해서 선제적으로 대응하고 서비스 해지를 줄임으로써 비용을 700% 절감하였다.
    • 모 금융기관
      • 전액 상환이 불가능하다고 채무자들에게 상환금액을 조정해 주고 전액 상환이 가능하다고 예측된 채무자들에게는 조정을 해주지 않음으로써 210만 달러 규모의 손실을 줄일 수 있었다.
  8. 주식시장(블랙박스 거래) 예측

    • London Stock Exchange
      • 런전 주식거래소 거래량의 약 40%가 알고리즘 시스템에 의해서 이루어진다.
    • John Elder
      • 자신이 직접 설계한 블랙박스 거래 시스템에 자신의 전재산을 투자하였다.
    • 다양한 회사들
      • AlphaGenius, Cerebellum Captial, Rebellion Research, 그리고 많은 회사들이 알고리즘에 의해서 거래한다.


의료 분야

  1. 사망 예측

    • 상위 5위권에 드는 미국의 한 의료보험회사
      • 말기 의료 서비스(유언장 작성 및 통증완화 치료 등)를 제공하기 위하여 건강보험 노인 가입자가 18개월 이내에 사망할 가능성을 예측한다.
    • Riskprediction.org.uk
      • 사용자의 신체조건 등에 근거하여 간단한 수술, 중대한 수술, 복잡한 수술, 복원성 대장직장절제술 같은 특수수술 등의 수술 도중에 사망할 리스크를 예측한다.
  2. 유행성 독감 예측

    • Google Flu Trends
      • (증상과 관련된) 온라인 검색 트렌드를 분석함으로써 질병통제센터보다 7~10일 앞서서 병원의 독감 환자 증가를 예측할 수 있다는 것을 보여주었다.
  3. 유방암 탐지

    • Stanford Univeristy
      • 예측 모델링을 활용하여 샘플 세포조직의 더 많은 요소들을 고려함으로써 유방암을 의사보다 훨씬 더 잘 진단해 낼 수 있는 혁신적 방법론을 개발하였다.
  4. 패혈증 예측

    • Systers of Mercy Health Systems
      • 환자의 활력징후(vital signs) 관찰에 근거하여 심각한 패혈증 및 패혈 쇼크를 예측한다. 수용 가능한 오인율 범위 내에서 71%의 케이스를 탐지하였다.
  5. HIV 진행 예측

    • 모 연구진
      • 질병 진행에 대한 예측 정확도를 70%에서 78%로 개선하였다.
  6. 약품 효능 예측

    • Pfizer
      • 환자에게 약품 투여 시 3주 이내에 호전될 확률을 예측한다.
  7. 조산 예측

    • 브리검영 대학 및 유타 대학
      • 빠르면 임신 24주차의 혈액 샘플에서 찾아볼 수 있는 펩타이드 바이오마커(peptide biomarker)에 근거하여 조산 위험성을 80% 정도 정확하게 예측한다.
  8. 발기 부전 예측

    • Pfizer
      • 더 효과적이고 간단한 자가진단 테스트용 5가지를 개발하였다.
    • John Elder
      • 자신이 직접 설계한 블랙박스 거래 시스템에 자신의 전재산을 투자하였다.
    • 다양한 회사들
      • AlphaGenius, Cerebellum Captial, Rebellion Research, 그리고 많은 회사들이 알고리즘에 의해서 거래한다.





출처 : 빅데이터의 다음 단계는 예측 분석이다 - 에릭 시겔

'Predictive Analytics' 카테고리의 다른 글

최소제곱법  (0) 2019.09.24
단순선형회귀  (0) 2019.09.19
Predictive Analytics  (0) 2018.04.16
Python 준비  (0) 2017.03.31
Linear Regression Analysis with Python #2  (0) 2017.03.31

    용어

  • 예측(Prediction)은 머신 러닝의 산물
    • 머신 러닝 : 데이터로부터 예측하는 방법을 배우는 것


  • 예측 모델(Predictive Model)
    • 클릭, 구매, 거짓말, 사망과 같은 한 개인의 행위를 예측하는 메커니즘
    • 개인의 특성을 입력받아서 '예측 점수'를 출력
    • 이 점수가 높을 수록 그 개인은 예측된 행위를 할 가능성이 높다


  • 예측 효과(The predicton Effect)
    • 작은 예측이 커다른 효과를 발휘한다.
    • 작은 예측에 의한 통찰, 즉 선택을 올바른 방향으로 향하게 하는 작은 예지적 넛지(prognostic nudge)로부터 가치가 발생한다.


  • 예측 분석(Predictive Analytics, PA)
    • 더 나은 의사결정을 내리기 위해 개인들의 미래 행위를 예측하고자 경험(데이터)으로부터 배우는 기술(technology)
    • 예측 분석은 컴퓨터 과학과 통계학에 근거를 두고 있음


  • 예측 목표(Prediction Goal)
    • '마케팅 홍보물'이 '그 고객'을 설득할 수 있을 것인가?
    • 영향을 예측하는 것은 예측에 영향을 준다.
    • 예측 분석은 행위를 예측하는 것으로부터 '행위에 대한 영향'을 예측하는 것으로 대폭 변화한다.


  • 예측 분석은 전망(forecasting)과는 다른 개념
    • 전망 : 거시적 차원에서 집합적 예측을 하는 것으로 예를 들어,
      • 경제가 어떻게 될 것인가?
      • 어느 대통령 후바가 오하이오에서 더 많은 표를 얻을 것인가?
      • 네브래스카 주에서 다음 달에 아이스크림이 얼마나 팔릴지에 대한 합계 숫자를 추산하는 것
    • 예측 분석
      • 네브래스카 주민들 중 어떤 '개인'이 손에 아이스크림 콘을 들고 있게될 가능성이 가장 높은가를 말해주는 것


  • 앙상블 효과(The Ensemble Effect)
    • 예측 모델들이 하나의 앙상블로 합쳐지면서 각자의 한계를 보완하게 되어 전체로서의 앙상블은 자신의 구성요소 모델들보다 더 정확하게 예측할 가능성이 높아진다.


  • 의사결정을 '데이터에 근거'하여 내리며, 한 사람의 '직관'에 덜 의존하는 추세가 늘어나고 있으며, 예측 분석은 이러한 추세를 선도하고 있다.


  • 데이터 효과(The Data Effect)
    • 데이터는 언제나 예측적이다.
    • 기업이 예측 분석을 할 대 항상 하는 가정


  • 예측 분석은 다음과 같은 단어들을 통칭하는 말이다.
    • 데이터 분석
    • 빅데이터
    • 비즈니스 인텔리전스
    • 데이터 과학


  • 향상 모델(Uplift Model)
    • 어떤 조치를 실행했을 경우와 그렇지 않은 경우를 비교하여 그런한 조치가 한 개인의 행위에 얼마나 영향을 미칠 것인지 예측하는 모델


  • 향상 점수(Uplift Score)
    • '어떤 조치가 또 다른 조치와 비교할 때 우리가 원하는 결과를 발생시킬 가능성이 얼마나 더 많은가?'라는 질문에 대답한다.
    • 한 기업이 마케팅 조치나 행동을 선택하는 데 가이드를 제공하며 각 개인에 대해서 무엇을 해야할지 또는 무슨 말을 해야 할지를 기업에게 알려준다.


예측은 비즈니스를 최적화한다

  • 구글과 아마존을 포함하여 인터넷 시대를 이끄는 기업들은 머신 러닝 기반의 예측 모델에 의존하는 비즈니스 모델을 가지고 있다.(Prof. Vasant Dhar, 뉴욕 대학 스턴(Stern) 경영대학원
  • The powerhouse organizations of the Internet era, which include Google and Amazon... have business models that hinge on predictive models based on machine learning.


  • 예측 분석을 시작한다는 것은 예측에 따라 행동한다는 것을 의미한다. 또한 데이터로부터 학습하고 발견한 것을 현실에 적용한다는 것을 뜻한다. 이제 많은 사람들이 예측을 행동으로 옮기고 있다. 그렇게 하지 않으면 경쟁자를 이길 수 없을 것이다.


  • 예측 분석을 응용하는 사례들이 홍수처럼 쏟아져 나오고 있다. 다음과 같은 몇 가지 핵심적 요소들이 댐의 수문을 열어젖혔다.
    • 엄청나게 증가하는 데이터량
    • 기업들이 예측 기술을 제대로 평가하고 수용하고 통합할 줄 알게된 문화적 변화
    • 기업에 예측 분석을 제공해 주는 소프트웨어 솔루션의 개선


예측 기술의 활용 방안

  • 예측 분석의 응용은 다음과 같이 규정할 수 있다.
    • 무엇을 예측하는가?
      • 예측하고자 하는 행위의 종류
      • 행동, 사건, 발생 등
    • 무엇을 할 것인가?
      • 예측에 기반한 의사결정
      • 각각의 예측에 따라 기업이 취하는 행동


  • 예측 분석을 도입하는 것은 기업을 위한 초인간적 위기감지 팀을 구성하는 것과 같다.
  • 기업이 내리는 모든 의사결정과 모든 조치들은 위험을 동반한다.
  • 모든 함정을 미리 발견하고 그것을 피해 감으로써 얻는 예방적 이익이 상상이상으로 전통적인 기업 리스크 관리가 세세한 위험 요소를 해결하는 것으로 확대되고 있다.
  • 미래를 살짝 엿볼 수 있다는 것은 당신에게 선택권이 주어진다는 뜻으로, 당신에게 강력한 힘을 제공한다.
    • 때로는 범죄, 손실, 질병 등 불가피해 보이는 일들을 회피하고자 무슨 조치를 취할 것인지에 대한 의사결정을 분명하게 내려야 한다.
    • 긍정적 측면에서 보면 수요를 미리 예견할 경우 당신은 그것을 이용하기 위해 조치를 취할 수 있다.
    • 어느 쪽이든 예측은 의사결정을 내리는데 도움을 준다.


  • 만약 당신이 '감지하고 추측하고 반응한다'는 기존의 보안정보 패러다임에서 '예측하고 계획하고 행동한다'는 패러다임으로 바꿀 수 있다면 어떻겠는가? - Christopher Fulcher 경사, 뉴저지 주 바인랜드 경찰서 최고기술책임자(CTO)


Fraud Detection

  • 무엇을 예측하는가?
    • 어떤 거래 또는 대출신청, 보조금 지급, 경비 처리, 환불 등이 사기인가?
  • 무엇을 할 것인가?
    • 사기일 가능성이 높다고 예측된 거래와 신청에 대해서 감사를 진행한다.


  • 사기범들은 뛰어나면서도 민첩하다. 낡은 사기 술책이 먹히지 않게 되자마자 금세 새로운 사기 술책을 고안해 낸다. - Steven Levitt and Stephen Dubner, 슈퍼 괴짜 경제학(Super Freakonomics)
  • 사기 감지 능력의 발전은 범죄자들로 하여금 더 스마트한 테크닉을 설계하여 스스로의 범죄능력을 개선시킨다.
  • 사기 행위는 예측 모델의 레이더 밑으로 잠입하면서 눈에 띄지 않기 위해 애쓴다.


Prediction Variables

  • 최근성(recency)
    • 한 개인이 가장 최근에 구매한 행위를 한 시점으로부터(또는 범죄를 저지르거나 의학적 징후를 보인 떄로부터) 몇 주가 지났는지를 숫자로 표현
    • 머지않은 미래에 그 사람이 그 일을 다시 할 가능성이 얼마나 되는지를 나타냄
    • 마케팅 접촉이든, 범죄 수사든 가장 '최근'에 활동적이었던 사람부터 주목하는 것이 합리적
  • 빈도(frequency)
    • 한 개인이 그 행동을 몇 번이나 했는지를 가리킴
    • 어떤 행위를 자주 한 사람은 그 행위를 또다시 할 가능성이 높다.
  • 행위 예측 변수
    • 우리가 측정하고자 하는 것은 항상 특정한 행위이며, 실제로 행위가 행위를 예측하게 해준다.
    • 장폴 사르트르 - 한 사람의 행동이 그의 진정한 자아를 말해 준다.


Most discussions of decision-making assume that only senior executives make decisions or that only senior executives decisions matter. This is a dangerous mistake. - Peter F. Drucker

의사결정은 오직 고위 경영진만 하는 일이라고 생각하거나 또는 오직 경영진의 결정만이 중요하다고 가정하는 것은 매우 위험한 오류이다. - 피터 드러커

  • 예측 분석은 마이크로 리스크가 누적되는 것을 막아주는 해독제 역할을 한다.
    • 예측 분석은 고도의 경각심을 가지고 각각의 마이크로 리스크를 찾아내서 선견지명적인 표시를 해줌으로써 그에 대한 조치를 취할 수 있게 해준다.
    • 리스크 점수는 예측 분석의 연료라고 할 수 있는 예측 모델링 방법론과 대체로 동일한 방식으로 만들어 진다.


리스크를 극복하는 데 있어서 예측 분석으로 얻을 수 있는 이점

  • 가정 : 수천 건의 융자를 가지고 있는 은행을 운영하고 있는데 그 중 10%는 회수할 수 없다
    • 어떤 건은 높은 리스크 점수가 매겨지고, 어떤 것은 낮은 리스크 점수가 매겨진다.
    • 이런 리스크 점수들이 제대로 잘 매겨져서 더 위험하다고 예측된 상위 50%의 대출 건들로부터 평균보다 2배 이상 더 많은 채무불이행 상황이 발생한다고쳐보자
    • 보다 현실적으로 평균 채무불이행 비율보다 70% 가량 더 많을 것이라고 하자
  • 이런 포트폴리오를 반으로 쉽게 나눌 수 있다.
    • 한쪽은 채무불이행률이 (평균 10%보다 70% 더 많은) 17%이고
    • 나머지 한쪽은 채무불이행률이 3%이다(이 둘을 합친 평균값이 10%이므로 한쪽의 17%를 제외한 나머지 한쪽은 3%이다)
  • 비즈니스가 2개의 완전히 다른 세상으로 구분된다
    • 하나는 안전한 세상이고
    • 다른 하나는 위험한 세상이다
  • 예측 분석이 데이터로부터 학습한 바를 통해서 미래라고 하는 커다른 불확실성으로부터 위험한 요소들을 걸러낼 수 있을 때만이 원하던 바를 이룰 수 있다


과거와 현대의 경계를 가르는 혁명적 사고는 바로 리스크를 다룰 줄 알게 되었다는 것이다. 거기엔 미래란 단순히 신들의 변덕이 아니며, 사람들이 자연에 순응만 하는 것은 아니라는 뜻이 담겨있다. 인간이 이러한 경계선을 넘어설 방법을 발견하기 전까지는 미래란 단지 과거의 거울이었거나 예언자나 점쟁이의 음산한 영역에 불과했다. - Peter Bernstein, Against the Gods: The Remarkable Story fo Risk


  • 데이터를 해독하여 리스크를 계량화함으로써 리스크를 효율적으로 관리하는 행위가 바로 비즈니스의 핵심


리스크를 극복하는 방법

  • 나쁜 일들이 발생할 것에 대비하기 위해서 예측 분석을 적용
    • 개별적 사안들에 대해서 부정적결과가 발생할 확률을 가지고 평점을 매기는 것
  • 예측 분석(Predictive Analytics, PA)
    • 더 나은 의사결정을 목적으로 개별 사안(사람)의 미래 행위를 예측하기 위해서 경험(데이터)으로부터 학습하는 기술
  • 기업이 예측 분석을 통해서 효과적으로 배우게 되는 것
    • 어떻게 마이크로 리스크들을 예견하여 위험을 감소시킬 것인가?
  • 예측 분석(Predictive Analytics, PA)
    • 마이크로 리스크를 관리하기 위해서 경험(데이터)로부터 배우는 기술
  • 모든 사업은 위험이 따른다. 나쁜 행위로 인한 리스크를 측정하고 예측함으로써 이득을 얻을 수 있다.
    • 이를 통해 예측 분석은 리스크를 기회로 전환시킨다.


대개의 경우에 평균은 평범하다. 그러나 의사결정을 할 때 평균은 대체로 우월하다. - James Surowiecki, 대중의 지혜(The Wisdom of Crowds)



5가지 예측 효과

예측 효과(The Prediction Effect)

    • 작은 예측이 커다란 효과를 발휘한다.

데이터 효과(The Data Effect)

    • 데이터는 언제나 예측적이다.

귀납 효과(The Induction Effect)

    • 머신 러닝에는 예술적 창의력도 작용한다.
    • 부분적으로는 인간의 비공식적 창의력에 의해서 설계된 전략이 컴퓨터 프로그램으로 구현되면서 새로운 사례들에 대해 우수한 효과를 나타내는 예측 모델을 개발할 수 있도록 도와주었다.

앙상블 효과(The Ensemble Effect)

    • 예측 모델들이 하나의 앙상블로 합쳐지면서 각자의 한계를 보완하게 되어 전체로서의 앙상블은 자신의 구성요소 모델들보다 더 정확하게 예측할 가능성이 높아진다.

설득 효과(The Persuation Effect)

    • 비록 눈으로 인지할 수 없지만 한 개인에 대한 설득은 향상 모델링을 통해서 예측할 수 있다.
    • 향상 모델링이란 경쟁하는 2개의 조치들로부터 발생한 결과들을 기록한 서로 다른 학습용 데이터 집합들을 예측을 목적으로 모델링하는 것이다.





'Predictive Analytics' 카테고리의 다른 글

단순선형회귀  (0) 2019.09.19
대표적인 예측 분석 사례  (0) 2018.04.20
Python 준비  (0) 2017.03.31
Linear Regression Analysis with Python #2  (0) 2017.03.31
Linear Regression Analysis with Python #1  (0) 2017.03.31

Big Data

  • 너무 크고 복잡해서 관계형 데이터베이스 관리 시스템(RDBMS; Relational Database Management Systems)와 같이 전통적인 데이터 관리 기법으로는 다루기 어려운 데이터


Data Science

  • 대량의 데이터를 분석해 지식을 추출하는 방법을 포함하며, 오늘날 쏟아지는 대량의 데이터를 다룰 수 있는 통계의 확장판
  • 컴퓨터 과학부터 통계학의 단골 메뉴까지 망라하는 기법을 활용


Big Data와 Data Science와의 관계

  • 원유와 정유 공장의 관계와 유사하며, 데이터 사이언스와 빅데이터는 통계적이고 전통적인 데이터 관리로부터 발전했으나 이제는 별도의 영역으로 간주


Big Data의 특징

http://www.gereports.kr/wp-content/uploads/2016/12/3v-820x327.png

출처 : http://www.gereports.kr/enabling-value-from-your-data/


  • 빅데이터의 특징은 V로 시작하는 세 단어로 표현되곤 한다.
    • Volume : 얼마나 많은 데이터가 있는가?
    • Variety : 데이터의 종류가 얼마나 많은가?
    • Velocity : 새로운 데이터가 얼마나 빨리 생성되는가?
  • 위의 3가지에 Veracity(정확성)을 추가해 4개의 항목으로 표현
  • 이러한 속성들이 바로 전통적인 데이터 관리 도구와 빅데이터를 구분
  • 빅데이터는 데이터의 수집과 선별, 저장, 검색, 공유, 전송, 시각화와 같은 하나하나의 과정이 쉽지 않음
  • 빅데이터에서 통찰을 얻는 것 또한 특별한 기술


1.1  Benefits and uses of data science and big data

  • 거의 모든 산업 분야별 기업체에서는 고객, 업무, 직원, 상품에 대한 통찰을 얻기 위해 데이터 사이언스와 빅데이터를 활용
  • 많은 기업에서 데이터 과학을 사용해 고객에게 더 좋은 경험을 하게 하고 교차 판매(다른 물품도 사게하는 일)나 상향 판매(더 비싼 물품을 사게하는 일), 개인화를 추구
  • 사용 예
    • 구글 애드센스(Google AdSense): 인터넷 사용자로부터 데이터를 수집해 인터넷을 이용하는 사람에게 적절한 광고 메시지를 전달
    • 맥스포인트(MaxPoint): 실시간 맞춤형 광고
    • 인사 전문가: 후보 검증을 위해 피플 애널리틱스(people analytics)와 텍스트 마이닝을 사용하여 직원의 사기를 점검하고 동료 간의 비공식적 네트워크를 연구
    • 금융 기관 : 데이터 과학을 사용해 주식 시장을 예측하고 대출의 위험을 평가하며 신규 고객을 유치하는 방법을 학습


1.2  Facets of data

  • 데이터 사이언스 및 빅데이터는 여러 유형의 데이터를 사용하는데 서로 다른 도구와 기법을 사용해야 함

데이터의 유형

  • 구조적 데이터(structured data)
  • 비구조적 데이터(unstructed data)
  • 자연어(natural language)
  • 장비에서 생성된 데이터(machine-generated data)
  • 그래프 기반 데이터(graph-based data)
  • 오디오, 비디오 및 이미지
  • 스트리밍 데이터(streaming data)


Structured Data

  • 정형 데이터라도 하며 데이터 모델에 의존적이며 레코드 내의 고정된 필드에 저장되어 있는 데이터
  • 데이터베이스의 테이블이나 엑셀 파일에 저장하기 쉬운 편
  • 데이터베이스에 있는 데이터를 관리하고 조회하는 데는 SQL(Structured Queary Language, 구조화된 질의 언어)을 사용
  • 구조적 데이터라 할지라도 가계도와 같은 계층적 데이터는 전통적인 관계형 데이터베이스에 저장하기 어려움
  • 사람들과 기계들 때문에 우리가 보는 세계는 구조적 데이터로만 이루어지지 않으며, 데이터는 비구조적인 경우가 더 많음


Unstructured Data

  • 이메일과 같이 데이터 모델에 잘 맞지 않는 데이터
  • 이메일에는 발신자, 제목, 본문과 같은 구조적 요소가 포함되어 있지만 특정 직원에 대한 불만 사항을 쓴 사람의 수를 알아내는 것은 쉽지 않음
  • 어떤 사람을 지칭하는 데만 해도 여러 방법이 존재할 뿐만 아니라 수천 가지 언어와 사투리로 인해 문제가 더욱 복잡해짐


Natural Language

  • 자연어는 비구조적 데이터의 특수한 유형
  • 자연어 처리를 위해서는 특수한 데이터 사이언스 기법과 언어학에 대한 지식이 필요하기 때문에 처리가 어려움
  • 자연어 처리 커뮤니티에서는 개체 인식, 주제 파악, 요약문 작성, 텍스트 완성, 감정 분석에서 성공을 거두었지만,
  • 한 분야에 맞게 학습시킨 모델을 다른 분야에 적용하는 것이 불가능


Machine-generated Data

  • 컴퓨터, 프로세서, 애플리케이션, 기타 기계가 사람의 개입없이 자동으로 생성한 정보
  • 기계 데이터인 경우에 많은 양의 데이터가 빠른 속도로 쌓이므로 확정성 있는 도구에 상당 부분 의존해 분석해야 함
  • 웹 서버 로그, 호출 상세 기록, 네트워크 이벤트 로그, 원격 검침 정보 등과 같이  기계 데이터는 고전적인 테이블 구조로 된 데이터베이스 잘 들어 맞음
  • 상호 관계가 복잡하거나 '네트워크를 이루른' 데이터에서는 개체(entity) 간의 관계가 중요하므로 다른 식으로 접근해야 함


Graph-based 또는 network data

  • 그래프 또는 네트워크 데이터는 객체 사이의 관계나 인접한 정도에 초첨을 맞춘 데이터
  • 그래프 구조에서는 꼭짓점(node)과 꼭짓점과 꼭짓점을 잇는 선분(edge), 속성(property)을 가지고 그래프 데이터를 표현하고 저장
  • 그래프 데이터는 소셜 네트워크를 표현하는 데 적합해 어떤 사람의 영향력을 평가하거나 사람들 사이의 최단 경로를 수치화하는데 사용
  • 그래프 데이터베이스는 그래프 기반 데이터를 저장하는데 사용하며 SPARQL과 같은 특수한 질의 언어를 사용해 조회


1.3  The data science process

  • 데이터 사이언스의 진행 과정은 일반적으로 그림 1과 같이 여섯 단계로 이루어진다.


그림 1  데이터 사이언스의 진행 과정


1. Setting the research goal

  • 데이터 사이언스 프로젝트를 요청받으면 가정 먼저 할 이은 프로젝트 사명서를 준비하는 것
  • 사명서에 포함될 내용
    • 무엇을 조사할 것인가?
    • 그 결과를 가지고 회사가 어떻게 이익을 낼 것인가?
    • 어떤 데이터와 자원이 필요한가?
    • 일정
    • 산출물 등


2. Retrieving data

  • 사명서에 명시된 데이터를 수집하는데
  • 이 단계에서 다음을 확인
    • 프로그램에서 사용할 데이터가 존재하는가?
    • 데이터의 품질은 어느 정도인가?
    • 데이터에 접근할 수 있는가?


3. Data preparation

  • 데이터를 수집하는 과정에서 오류가 발생하는 일이 잦기 때문에 데이터의 품질을 높여 다음 단계에서 쓸 수 있도록 해야 함
  • 데이터 준비 단계는 다음 3단계로 구성
    • Data cleaning
      • 데이터 출처로부터의 거짓 데이터를 제거하며 데이터 출처 사이의 불일치를 해소하는 정제 과정
    • Data intergration
      • 여러 데이터 출처로부터 얻은 정보를 조합함으로써 데이터 출처를 보충하는 통합 과정
    • Data transformation
      • 데이터를 모델에 적합한 형태로 변환하는 과정


4. Data exploration

  • 데이터를 깊이 이해하기 위해 다음의 내용을 이해하려고 노력해야 함
    • 변수들의 상호작용
    • 데이터의 분포
    • 이상점의 존재
  • 데이터를 탐색하기 위해 기술 통계학(descriptive statistics), 시각화 기법, 단순한 모델을 주로 사용하며 이를 탐색적 데이터 분석(exploratory data analysis, EDA)이라고 함


5. Data modeling

  • 이전 단계로부터 얻은 모델, 도메인 지식, 데이터에 관한 통찰을 가지고 연구 과제에 대한 답을 찾음
  • 통계학, 머신러닝, 운영과학(operational reseach)과 같은 분야의 기법을 사용
  • 모델을 구축하는 과정에서 모델로부터 변수를 선택하고, 모델을 실행하고, 모델을 진단하는 것을 반복적으로 수행


6. Presentation 및 automation

  • 결과를 발표하기 위해 발표 자료나 연구 보고서 등의 결과물을 작성
  • 때로는 업무 수행 과정을 자동화해야 함



1.4  The big data ecosystem and data science

  • 데이터 사

'Data Science with Python' 카테고리의 다른 글

기술 통계량(Descriptive Statistics)  (0) 2020.06.16
재표본 추출  (0) 2019.11.25
가설검정  (0) 2019.11.22
A/B 검정  (0) 2019.11.22

+ Recent posts