카테고리 보관물: 통계

MAB (Multi Armed Bandit) – 광고 플랫폼의 캠페인 노출 최적화

MAB는 기계학습 강화학습의 일종입니다. 완전한 강화학습은 아니지만 포함해서 취급합니다.

MAB는 “엠에이비”, “멀리암드밴딧”이라고 발음합니다.

“팔 여러 개 달린 산적” “Multi Armed Bandit”은 슬롯머신의 별명인데 이 알고리즘은 이름처럼 “어떤 슬롯 머신의 팔을 당겨야 돈을 딸 수 있는가?” 와 같은 문제를 풀기위한 방법입니다.

엄밀한 의미의 강화학습에 포함되지 않지만 상당히 간단하고 쓸만하고 강화학습의 개념을 익히기 좋기 때문에 강화학습을 설명할 때 가장 먼저 설명하는 것이기도 합니다.

여러 대의 슬롯 머신이 있고 이 슬롯 머신 중 어떤 것의 레버를 당겨야 돈을 딸 수 있는가를 푸는 문제입니다. 한 번에 1대의 슬롯머신의 레버를 당기고 계속해서 반복합니다.

이 문제의 전제 조건이 있는데 한 번에 하나의 슬롯머신의 팔을 당길 수 있다는 것입니다.

그래서 동시에 모든 슬롯머신의 팔을 당겨서 그리고 여러번 당겨서 어떤 슬롯머신이 돈을 딸 학률이 높은지 알아낼 수 없습니다.

그래서 한 번에 하나씩만 선택해서 돈을 최대한 많이 따는 것이 이 문제의 푸는 목적입니다.

복잡한 공식은 여기에 안 적겠습니다. 구글에서 찾아보시면 수식과 코드가 다 있습니다.

첫번째 방법. Greedy 욕심쟁이

모든 슬롯머신에 순차적으로 한 번씩 팔을 내려봅니다. 그래서 돈을 못땄다면 다시 한 번씩 다 팔을 내려봅니다.

몇번을 수행한 후에 딴 돈이 가장 많은 슬롯머신에게 계속해서 몰빵합니다.

이게 그리디(Greedy, 탐욕스러운) 방식입니다. 단순하면서도 조금 무식한 방법입니다.

두번째 방법. epsilon

Greedy 방법을 사용하되 무작정 사용하지 않고 랜덤으로 팔을 당길 확률을 정해놓습니다.

만약 50%의 확률로 랜덤을 고르겠다고 하면 한 번은 지금까지 가장 돈을 많이 딴 슬롯머신을 당기고 한 번은 랜덤으로 아무것이나 고르는 방법입니다.

그나마 다른 것들에게 기회를 준다는 것 때문에 낫습니다.

epsilon이라는 이름은 랜덤으로 고를 확률값을 epsilon이라고 이름을 붙여서 부르기 때문입니다.

세번째 방법. UCB(Upper-Confidence-Bound)

위의 epsilon에서 약간의 공식을 주어서 랜덤 찬스가 왔을 때 무조건 랜덤으로 어떤 슬롯머신을 팔을 다기지 않고 덜 뽑혔던 슬롯머신에 가중치를 두어서 더 뽑아서 팔을 내려줍니다.

네번째 방법. Tompson sampling

톰슨 샘플링은 설명을 하면 조금 복잡해지는데 확률 분포 중 하나인 베타분포를 이용해서 확률이 가장 높은 것을 선택하는 것입니다.

베타분포 함수에 선택된 횟수와 돈을 딴 횟수를 입력하면 베타분포를 각각 구할 수 있고 그 베타분포를 확률 분포로 이용해서 값을 구하면 선택할 것을 찾을 수 있습니다.

저장된 데이터를 이용할 수 있는 장점이 있고 UCB 보다 성능이 조금 더 좋아서 온라인 추천 시스템에서 많이 이용되고 있습니다.

A/B 테스트와 MAB의 관계

A/B 테스트는 통계학의 실험계획법 중 하나 인데 2개 또는 2개 이상의 그룹을 동일한 수(최대한 비슷한 수) 만큼 각각 분할해서 한쪽에만 다른 처리를 해서 두 그룹의 차이를 보는 방법입니다

온라인에서는 흔히 버킷테스트라고 하는 방법입니다.

예를 들어 광고배너가 있는데 원래 배너는 테두리가 하얀색인데 테두리를 빨간색으로 바꿨을 때 사람들이 어떤 것을 클릭을 더 많이 하는지 알아 보고 싶을 때 같은 경우에 합니다.

A/B 테스트가 오랫동안 사용한 방법이기 때문에 잘 알려져 있지만 문제는 두 그룹을 방해받지 않게 불한하는 방법이 상당히 어렵고 두 그룹의 차이를 알아보는 방법이 데이터의 양상과 원래 데이터의 특성에 따라 여러가지 통계적인 방법을 써야하는 데 실수로 잘못된 방법으로 확인을 했다고 하더라도 그 실수를 알아내기 어렵다는 문제가 있습니다.

A/B 테스트를 하는 것은 많이 어렵지 않지만 A/B테스트의 결과를 해석하는 것은 매우 숙련된 통계학자가 필요하고 시간도 많이 걸립니다.

그래서 A/B 테스트를 하지 않고 각각 반응을 그대로 볼 수 있는 어떤 환경이 있다면 그 환경에서는 각각 매번의 결과에 따라서 결과가 좋은 것에 점수를 더 줘서 그것을 선택하게 만드는 방법을 쓰자는 것입니다.

그래서 MAB는 온라인 시스템의 추천시스템이나 평가에 굉장히 적합합니다.

광고시스템과 MAB

한 번에 5개의 제품을 동시에 보여지는 광고 이미지가 있다고 가정합니다.

사용자 별, 또는 사용자 그룹별로 어떤 제품에 더 관심을 가지는 지를 보고 클릭을 많이 하는 제품을 MAB에 의해서 더 많이 노출한다고 하겠습니다.

흔히 쓰는 방법이지만 이게 문제가 좀 있습니다.

  • 선택할 제품이 매우 많은 경우에는 못합니다. 아마도 제품의 카테고리가 있고 그것들 중에 가장 잘 팔리는가 하는 전략을 취할 수 있지만 상식적으로 좋은 방법은 아닐 것입니다.
  • 선호도는 계절성 효과, 요일 효과, 캠페인에 피로도에 따라 달라집니다. 슬롯머신 처럼 확률이 안변한다는 가정을 두기가 좀 어렵습니다. 변동이 너무 많습니다.
  • 또 가중치를 변경하는 것 때문에 생기는 문제가 파생적으로 생기는데
    • 쿠키로 인해 신규 및 재이용자의 분포에 영향을 미칩니다.
    • 변화에 대한 적응이 느리기 때문에 인해 관성때문에 결과가 왜곡될 수 있습니다.

아주 단순한 경우에만 사용이 가능하며 복잡한 시스템으은 오히려 결과를 왜곡할 수 있습니다.

저렇게 선택한 것이 여전히 가장 좋은 방법 또는 그리 좋은 선택이 아닐 수도 있겠지만 그 자체를 확실하게 확인 못합니다. 이건 다른 알고리즘도 동일한 문제이긴 합니다만.

공짜책 – 케빈 머피의 새 기계학습 책

무료책입니다. 아래 링크를 방문하시면 됩니다.

https://probml.github.io/pml-book/book1.html

기계학습 서적의 저자로 유명한 Kevin Patrick Murphy의 새 책 이라고 합니다.

현재는 Draft 판과 Python 코드를 다운로드 받을 수 있습니다.

저는 아직 읽어 보지는 못했습니다만 목차만 살펴봤을 때는 다른 기계학습 서적과 대동소이한 구성으로 보입니다.

코호트 분석 (Cohort Analysis)

코호트 분석

동질의 세그먼트 중에서 유사한 경험을 한 그룹을 코호트(Cohort)라고 합니다. 흔히 동일한 사회적 경험을 한 그룹이라고 말하기도하는데 동일한 시기에 온라인 매장에 최초 또는다시 접속한 고객 군을 말하기도 합니다.

동일한 시기인 이유는 동일한 시기에 온 사람이면 온라인 사이트에서 진행하는 프로모션 이벤트들 중에서 동일한 것을 보고 왔을 가능성이 크기 때문입니다.  20% 할인행사라든가 1년 동안 10% 할인은 해준다거나 특정 상품을 반값에 해준다거나 하는 행사들입니다.

이렇게 특정 프로모션을 사회적 경험으로 볼 수 있고 각각의 프로모션 이벤트를 통해서 들어온 그룹들은 각각의 특성을 가질 가능성이 큽니다. 사이트에 계속해서 방문한다거나 처음만 접속해서 가입하고 물건을 구매한 뒤에 그 뒤로는 오지 않는다거나 하는 것입니다.

그런 그룹들의 행태를 지켜보다가 향후에 이벤트를 할 때 효과가 좋은 이벤트를 다시  한다거나 이탈률이 높은 그룹에 프로모션을 다시 한다거나 해서 재방문 고객들을 계속 유지해서 비즈니스의 매출을 유지하는 방식으로 이용합니다.

조금 어렵게 말하면 코호트 분석은 서비스 또는 어떤 비지니스에서 중요한 볼륨(양적) 지표의 수치가 증가함에도 불구하고 리키버킷(고객이 새는것)을 관리하지 못해 주 수익이 증가하지 않는 것에 대한 이유등을 분석하기 위한 방법으로 잘 알려져 있습니다.
물론 그 외에도 여러가지를 볼 수 있습니다. 마켓분석에서 쉽게 볼 수 있는 분석 방법이며 특히 고객이탈방지 분석(Churn Analysis)에 사용할 수 있는 분석 방법 중에서 가장 잘 알려진 것 입니다.

코호트 분석 도표화 및 시각화

코호트 분석은 주로 스프레드시트(spread sheet) 표와 다층 케이크 차트를 이용합니다.

Image

엑셀로 하는 코호트 분석입니다.
데이터는 연습용 데이터입니다.
보는 방법은 위에서 아래로 왼쪽에서 오른쪽으로 보는 것이고 진행월별 유지 고객과 유지 비율등을 봅니다.
이외에도 월간지속매출?을 보는 표와 이탈 고객등에 표도 그려주는 것이 좋습니다.
각 표별 시각화는 엑셀로 그려도 되지만 R로 작성된 시각화가 보기 좋으므로 R로 그리는 것이 좋습니다.

Image

R로 시각화한 다층 케이크 (Layer-Cake) 차트입니다.
데이터는 위 엑셀장표의 데이터와는 다른 것을 플로팅한 것으로 단순한 시뮬레이션 데이터입니다.
차트의 꼭대기 부분은 전체 고객들의 수가 됩니다.
각 계층(색으로 구분된 층)은 진입한 월별 고객들의 숫자입니다.
진입하고 첫달에 이탈하는 경우가 많은 것을 알 수 있습니다.
ARPU와 MRR 그리고 고객유치비용등을 같이 봐야 하겠지만 일단 첫달 이탈률이 매우 높아 만약 비즈니스에 문제가 좀 있다는 것을 알 수 있습니다.

코호트 분석에서 볼 수 있는 것들

리키버킷은 사용자 또는 고객이 일정 수가 지속적으로 이탈하는 상태를 말하는 신조어인데, 결국 신규 고객의 유입이 고객의 이탈을 따라잡지 못하거나 각종 리텐션 방법으로 빠져나가는 사용자를 방어하지 못하면 장기적으로 비즈니스를 안정화할 수 없거나 망하게 됩니다.

리키버킷은 물이 새는 양동이라는 뜻입니다

고객유실(고객 이탈)을 완벽하게 막을 수는 없겠지만 최대한 잘 방어하지 못하면 매출이 늘어나도 장기적인 수익률이 증가하지 않는다거나 마케팅 비용을 허비한다거나 하는 문제가 발생하는데 코호트 분석에는 이 부분을 중점적으로 밝히려고 하는 것입니다.  고객유실을 더 이상 줄이지 못한다고 판단되면 고객유치비용을 조절하거나 해야 합니다.
이외에도 코호트 분석을 하는 주된 이유는 고객의 반응은 서비스나 상품이나 서비스에 대해 라이프타임(수명)을 가지고 있는데, 어떤 비즈니스이던 고객의 비즈니스에 대한 라이프사이클을 길게 유지하고 이탈하지 못하도록 방어하는데 필요한 정보를 얻는데 있습니다.
그리고, 신규 고객을 유입시키는 것 보다는 기존 고객의 이탈방지를 하는 것이 비용소모가 더 적고 효율적인 것으로 알려져 있습니다.

고객 유지를 위해서는 현재의 비즈니스가 다음 4가지 중 어느 상황인지 판별을 해야합니다. (이외도 봐야 하는 것들이 상당히 많습니다만 마켓분석이 전문이 아니라서 저도 공부가 굉장히 필요할 것 같습니다)

  1. 매출이 새로운 인입 고객로부터만 발생한다. (제로섬에 가까운 망조)
  2. 매출이 한 사람당 한 번 만 이루어지고 더 이상 발생하지 않는다. (얼리 어댑터 문제로 빨리 망할 징조)
  3. 매출이 기존 고객으로부터만 발생한다. (더 이상 신규고객이 없어 서서히 망해가는 징조)
  4. 매출이 새 인입고객과 기존 고객으로부터 발생한다. (좋은 징조)

여기서 매출은 온라인 서비스라면 페이지뷰(page view)로 생각하면 됩니다. 게임이라면 처음 가입해서 하던 고객이 얼마만에 게임을 그만 두는지가 되겠습니다.
최근 IT기반 스타트업의 마케팅 분석에서 코호트 분석이 많이 쓰입니다. 비즈니스 형태가 코호트 분석을 하기에 잘 맞아 떨어져서 그런것도 같습니다.

위의 상황중 어느 상황에 해당하는지를 확인하기에 가장 좋은 것 중 하나가 코호트 분석이라고 알려져 있습니다.
최근 온라인 서비스들은 깔때기 분석(Funnel Analysis), 코호트 분석 (Cohort Analysis), 대조군 테스트 (A/B test, 버킷 테스트라고도 합니다)에 대해서 잘 알아야 한다고 말합니다.
이중에서 제가 생각할 때 가장 중요한 것은 버킷테스트(A/B test) 입니다. (이것은 예전 블로그에서도 설명한 적이 있습니다만)
기술적으로는 코호트 분석은 집단을 테스트나 비즈니스로의 진입 시작 시점으로 구분해서 통계지표를 나누어 확인하는 것으로 복잡한 알고리즘이 사용되는 것은 아닙니다.

물론 원천데이터의 형태에 따라 집계는 다소 컴퓨터 연산자원이 필요하거나 복잡할 수 있습니다.

구체적으로 예를 들어 설명하면 월별로 가입한 사람들을 따로 분류(segmentation)해서 월별 흐름에 따른 주요 지표의 추이를 보는 것입니다. 이렇게 나누는 것이 유용한 이유는 시대를 함께 겪은 그룹끼리는 사회적으로 공감대나 어떤 특성등을 가지게 되고 그것들이 고객행위의 라이프사이클에 각각 다르게 영향을 끼친하는 것입니다. 즉 월별로 진입한 사람들은 뭔가의 영향에 동질감을 가지게 되어 있어서 그게 뭔지 알아야 한다는 것입니다. 그리고 좀더 자세히 분석하기 위해서 데이터를 드릴다운(drill down)해서 특별히 더 세분화된 그룹을 본다거나 개별 고객을 확인해 본다거나 하는 것도 추가로 해 볼 수 있습니다.

 

R ARIMA 예제 코드

R의 ARIMA 모형의 예제입니다.
서버의 메모리의 사용량의 추이를 보고 얼마 후에 고갈되는지를 예측하는 코드입니다.
물론 예측력은 많이 떨어지고 현실성이 없을 수 있습니다.

# -------------------------
# Memory usage forecasting
# -------------------------
library(stats)
arima(lh, order = c(1,0,0))
arima(lh, order = c(3,0,0))
arima(lh, order = c(1,0,1))

arima(lh, order = c(3,0,0), method = "CSS")

arima(USAccDeaths, order = c(0,1,1), seasonal = list(order=c(0,1,1)))
arima(USAccDeaths, order = c(0,1,1), seasonal = list(order=c(0,1,1)),
method = "CSS") # drops first 13 observations.
# for a model with as few years as this, we want full ML

arima(LakeHuron, order = c(2,0,0), xreg = time(LakeHuron)-1920)

## presidents contains NAs
## graphs in example(acf) suggest order 1 or 3
require(graphics)
(fit1 <- arima(presidents, c(1, 0, 0)))
tsdiag(fit1)
(fit3 <- arima(presidents, c(3, 0, 0))) # smaller AIC
tsdiag(fit3)

# ----- prediction part

od <- options(digits=5) # avoid too much spurious accuracy
predict(arima(lh, order = c(3,0,0)), n.ahead = 12)

(fit <- arima(USAccDeaths, order = c(0,1,1),
seasonal = list(order=c(0,1,1))))
predict(fit, n.ahead = 6)
options(od)

# ----- Arima
library(forecast)
fit <- Arima(WWWusage,c(3,1,0))
plot(forecast(fit))

x <- fracdiff.sim( 100, ma = -.4, d = .3)$series
fit <- arfima(x)
plot(forecast(fit,h=30))

# ----- Arima forecast for memory usage (unit %) -----
library(forecast) # need to install the package "forecast"
memory.usage.threshold <- 100 # 100%
memory.usage.forecast.period <- 30 # 미래 30일분까지 예측
memory.usage.observations.startdate <- "2012-09-01"
memory.usage.observations <- c(10,11,30,35,36,39,48,56,75,69,68,72,71,72,83) # 관측치 12일분

memory.usage.period <- seq(as.Date(memory.usage.observations.startdate), length=length(memory.usage.observations), by="1 day") # 날짜세팅
memory.usage.df <- data.frame(row.names=memory.usage.period, memory=memory.usage.observations) # data.frame으로 변환
memory.usage.ts <- ts(data=memory.usage.df) # time series 생성
memory.usage.model <- auto.arima(memory.usage.ts) # arima 모델 생성
memory.usage.forecast <- forecast(memory.usage.model, h=memory.usage.forecast.period) # forecast 결과 생성
memory.usage.forecast.df <- as.data.frame(memory.usage.forecast) # forecast 결과 변환

d = memory.usage.threshold,][1,])) # 100 이 넘는 최초 데이터 추출
if(is.na(d)) {
print(sprintf("앞으로 %s일동안 %s%% 초과하지 않음", memory.usage.forecast.period, d - length(memory.usage.observations)))
} else {
print(sprintf("%s일 후에 %s%% 초과됨", d - length(memory.usage.observations), memory.usage.threshold))
}

# ---- 시각화(Plotting)
plot(memory.usage.forecast) # plotting
abline(h=100, col = "red", lty=3)
abline(v=d, col = "red", lty=3)

library(ggplot2)
library(scales)

plt <- ggplot(data=pd,aes(x=date,y=observed))
p1a<-p1a+geom_line(col='red')
p1a<-p1a+geom_line(aes(y=fitted),col='blue')
p1a<-p1a+geom_line(aes(y=forecast))+geom_ribbon(aes(ymin=lo95,ymax=hi95),alpha=.25)
p1a<-p1a+scale_x_date(name='',breaks='1 year',minor_breaks='1 month',labels=date_format("%b-%y"),expand=c(0,0))
p1a<-p1a+scale_y_continuous(name='Units of Y')
p1a<-p1a+opts(axis.text.x=theme_text(size=10),title='Arima Fit to Simulated Datan (black=forecast, blue=fitted, red=data, shadow=95% conf. interval)')

원본 소스코드는 아래에 있습니다.

https://github.com/euriion/code_snippets/blob/master/R/forecast_exam.R

2SD rule (2표준편차 법칙)

2SD Rule (2표준편차 법칙, To understand variability; 가변성을 이해하기?)

Super crunchers(슈퍼크런처, Ian Aires저) 라는 책에 있는 내용 중 2SD라는 용어가 나와서 궁금하던 차에 내용 일부를 정리해 둡니다. 

슈퍼크런처는 기술서적이라기 보다는 교양서적입니다. “직관보다는 데이터분석에 입각한 의사결정에 중점을 두는 것이 옳다”라는 내용인데요.  전문가의 직관에 의존한 의사결정도 좋지만 데이터에 입각한 근거있는 결정도 필요하다는 내용입니다.  데이터마이닝에 관심이 있는 사람은 한 번 읽어봐도 좋을 듯 싶습니다. 어려운 내용은 아닙니다만 생각을 좀 해야 하는 부분은 있습니다.

이 책에 통계에 대한 내용이 나옵니다.

2표준편차법칙(2SD rule)은 책의 후반부에 나오는데 잘 보지 못하던 용어라서 여기저기서 내용을 찾아서 정리해 두려는 것입니다.

정보를 찾다 보니 이미 잘 알려진 내용을 다른 방식으로 표현한 것이고 일반적으로 생활에서 어떻게 쉽게 적용이 가능한지 보여주는 일종의 단편적인 예와 같은 것입니다.

2SD는 어떤 정규분포변수가 그 평균치의 -2 표준편차와 -2표준편차내에 위치할 확률이 95%가 된다는 말입니다. 여기서 ±2SD는 2의 의미는 1.96을 반올림해서 나온 근사치값으로 보입니다. 그래서 ±3SD rule (2.54를 반올림해서 나온것이라고 생각하는데 반올림하기에는 반올림한 차이가 좀  큰 것 같아서 조금 그렇네요)일 경우에는 99% 라고 계산하는 계산식도 자료를 찾던 중 쉽게 찾아 볼 수 있었습니다.

제가 가진 통계학 책들에는 2SD, 3SD라는 용어를 사용하지 않았기 때문에 무슨 용어인가 궁금 했습니다만 생각보다 단순한 것이었습니다. 용어는 저자가 직접 만들어낸 것 같기도 한데 정확하게 저 용어를 사용해도 되는지는 모르겠습니다. 저자가 유명한 사람이고 하다보니 이런 용어 새로 만든다고 해서 뭐라고 할 사람은 별로 없을 것 같습니다. 영문 자료를 찾다 보니 책의 영향인지는 모르겠지만 같은 용어를 쓰는  분들도 더러 있었고 아닌 경우에도 대충 감을 잡을 만한 비슷한 내용을 생각보다 많이 볼 수는 있었습니다. 아래는 찾은 내용들과 책을 정리한 내용을 잊어 버릴까봐 기록해 둔 것입니다.

2SD rule: 정규분포변수가 그 평균치의 +-2표준편차 내에 존재할 확률은 95%이다.

먼저 슈퍼크런처 책에 나와 있는 내용들중 예제를 Q/A형식으로 그대로 조금 거쳐서 적은 것입니다.

책의 질답 내용

Q. 사람의 IQ는 평균이 100이고 표준편차가 15인 정규분포를 따른다. 그러면 사람들의 IQ는 대체 얼마라는 말인가?

A. 2SD 법칙에 의하면 95%의 사람들의 IQ는 70(100에서 2표준편차를 뺀값)에서 130(100에서 2표준편차를 더한 값, 즉 15×2=30) 사이에 존재한다. 2SD 법칙을 사용하면 표준편차값을 분산도에 대한직관적인 표현으로 쉽게 변환할 수 있다. 대부분의 사람들은 IQ가 70 ~ 130사이이다. IQ의 분산도가 더 적다면, 즉 표준편차가 5라면 95%의 사람들을 포함하는 IQ의 범위는 훨씬 작아진다.  다시 말해 95%의 사람들이 IQ가 90과 110사이라고 말할 수 있다.

Q. 유권자 1243명을 대상으로한 퀴니피액대학 여론조사에서, 상원의원 후보자 가운데 캘빈이 52%로 48%인 홉스보다 지지율이 높게 나왔다. 이번 조사의 오차 한계는 +-2% 포인트이다. 캘빈이 당선된다는 말인가? 아니라는 말인가?

A. 오차한계는 2SD에 해당한다. 오차한계가 2%포인트라고 나왔다면 이것은 1표준편차(1SD)가 1% 포인트라는 뜻이다. 우선 캘빈의 표준 지지율 52%에서 오차한계(즉 2SD)를 더하고 빼면 특정한 범위가 나온다. 즉 52 ±2% 이다. 2SD rule에 의하여 캘빈을 지지하는 유권자가 50% ~ 54% 사이일 확률이 95%라는 말이다. 캘빈의 지지율이 50% ~ 54%일 확률이 95%이므로 그의 실제 지지율이 종형곡선(정규분포, Normal distribution의 그래프)의 양쪽 가장자리에 속할 확률, 즉 54%이상 50%이하일 확률은 5%가 된다. 그리고 종형곡선의 양쪽 가장자리 부분은 면적이 동일하므로(정규분포 곡선은 아시다시피 좌우 대칭입니다), 캘빈의 지지율이 50%이하가 될 확률은 2.5%이다. 이는 캘빈이 앞서고 있을 확률이 97.5%라는 뜻이다.

Q. 레이번이 셜리를 51% 대 49%, 오차한계 2%로 앞서고 있는 경우, 신문은 이 경합을 두고 ‘통계적으로 볼 때 막상막하’라고 보도할 것이다. (맞는 말인가?)

A. (하지만) 이건 헛소리다. 레이번의 여론조사 결과는 50%에서 1표준편차만큼 높다(오차한계는 2표준편차이므로 1표준편차는 1%). 따라서 레이번이 앞서고 있을 확률이 84%라는 것을 알게 된다. 별다른 변수가 없다면 레이번의 당선이 유력한 것이다. 누구를 지지할지 결정 못한 사람들과 제3의 후보들이 있기 때문에, 많은 여론조사에서 경합을 벌이는 두 후보의 지지율은 합해도 100%가 되지 않는다. 그러나 지지율 우세 확률은 우리에게 예상 당선자를 말해준다.

※ 그럼 이제 책에 나와 있는 몇가지 정의를 다시 적어 둡니다.

통계적의 유의하다. 통계학자들이 어떠한 결과를 두고 ‘통계적으로 유의하다’ 라고 말하는 경우, 어떤 예측값이 다른 값과 2표준편차 이상 차이가 난다는 것을 뜻한다.

2SD의 또다른 측면 임의변수가 예상 평균값에서 2표준편차 이상 떨어져 있을 확률은 5%가 채 되지 않는다. (2SD rule에 의하면 95%가 평균으로부터의 2SD내에 있으므로 나머지는 5%가 됩니다)

오차범위 오차범위는 신뢰구간이 95%라면 그 95% 바깥쪽 넓이를 말하는 것이 아닙니다. 95%신뢰구간이라고 하면 이 신뢰 구간 안에 포함될 (표본이 아닌 실제값이) 확률이 95%인 것입니다.

다시 말해서 신뢰구간은 ‘확률±오차범위’ 에 포함될 확률이 95% 임을 말합니다. 물론 2SD를 따른다고 하는 경우에 그렇습니다. 아래는 무한모집단에서 표본허용오차 공식 ±1.96sqrt(p(1-p)/n) 또는 Z crit * stdev / sqrt(n) 표본수가 매우 큰 경우 즉, 무한모집단이면 보통 모집단은 정규분포(Normal Distribution, Gaussian Distribution)를 따르는 것으로 가정합니다.  자연계에서 아주 자연스러운 데이터의 확률 분포는 정규분포를 보편적으로 따릅니다. 그리고 샘플링의 경우 중심극한원리 (Central Limit Theorem)에 의해서 표본(Sample)의 양이 충분하다면 정규분포를 따르게 됩니다 여기서 표본 오차를 구하려면 표본집단에서의 표준편차나 모집단의 편차가 필요합니다.

모집단의 표준편차가 없는 경우 표본집단의 표준편차를 이용하게 되는데 보통의 경우 모집단의  표준편차(또는 분산)을 구할 수(알 수) 없는 경우가 대부분입니다. 아래는 여기저기서 긁어 모은 오차범위를 구하는 것에 대한 예제풀이입니다.

(워낙 마구잡이로 긁어오다 보니 출처가 엉망이 되었고 내용을 제가 많이 편집해서 출처는 따로 기재하지 못했습니다. 혹시 문제가 된다면 알려주시면 바로 지우도록 하겠습니다.)

예제

n(표본수) = 1000명 일 경우

보통 여론조사에서 1000명 많이 한다고 합니다. 그러고보니 뉴스에서 1000을 대상으로 했다고 하는 것을 많이 들은 것도 같지요. 하지만 1000명으로 고정되어 있는 것은 아닙니다.

(±)1.96 * sqrt(0.25/1000) = 0.0309. 여기에 100을 곱하면 3.09 1000명일 경우는 표본오차가 대략 (±)3.1% n(표본수) = 600이라면 같은 방식으로 계산해서 (±)4.0%

0.50.5를 하는 이유 여기서 0.50.5는 최대허용오차(중요)로 0.50.5=0.25로 보다 큰 숫자를 가지는 경우는 없습니다. 생각해 보니 진짜 그러네요. 0.1 * 0.9, 0.2 * .08, 0.3 * 0.7, … 모두 0.25보다는 작습니다)

예를 들어 0.4 * 0.6 = 0.24로 0.25보다 작으므로 0.50.5를 두고 최대허용오차라고 합니다. 언론에서 말하는 (±)3.0, (±)4.0 등도 모두 최대허용오차입니다.

1.96을 곱하는 이유 정규분포의 특성에 따르면, 신뢰구간 95%일 경우는 1.96을 곱하고, 99%일 경우는 2.54를 곱합니다. (위에서 말씀드렸지만 2SD(1.96)는 95%이고 3SD(2.54)는 99%입니다) 즉, 확률을 높일 경우 정규분포에서 보는 신뢰구간이라고 정의하는 영역이 넓어지게 됩니다.

위의 예(n = 1000)에서 1.96(95% 신뢰구간) 대신에 2.54(99% 신뢰구간)를 곱하면, 99%의 신뢰구간에서 (+-)4.0%가 됩니다.

추가 설명

보통 지지율이나 여론 조사 등에서 이 오차범위는 1.96*0.25/sqrt(n) 으로 구하는데, 당연히 n이 클수록 이 값이 작게 나오며 표본을 많이 뽑을 수록 오차범위가 줄어들어 좋습니다. 예를 들어보면, A후보가 49% B후보가 46% 지지율을 얻고 오차범위가 ±1.0%라고하면 A후보는 48%~50%의 지지율을 얻고, B후보가 45%~47%의 지지율을 얻을 확률이 95%라는 것이죠.

위의 책에서의 예제와 같은 것입니다. 확률이 두 번 겹쳐서 나오니까 헷갈리지만 그리 어렵지 않습니다. 어쨌든 여기서는 95%신뢰구간 하에서는 A후보가 B후보를 이기고 당선될 것이라고 생각할 수 있죠. A후보의 지지율 중 낮은 영역에 있는 48%가 B후보의 지지율 중 높은 영역에 있는 47%보다 크기 때문에 95%확률로 A후보가 당선된다는 얘기입니다. 물론 5%의 오차가 있기 때문에 아닐 수도 있겠지만 가능성이 적겠지요.

100%신뢰구간은 가능한가?

100% 신뢰구간은 -무한대에서 +무한대가 되어야 해서 현실에서는 성립이 안됩니다.

사용할 수가 없고 구간을 정할 수도 없는 것이지요. 보편적으로 신뢰구간을 정해야 하는 경우 대부분 95%신뢰구간을 사용하고 특별히 더 정확하게 알고 싶은 경우나 투표의 경합지역 같이 민감한 경우는 좀더 신뢰성을 높이기 위해서  99%를 사용하기도 한다고 합니다.

실제로 정규분포를 R이나 Prism, Excel등의 툴들을 이용해서 그래프를 그려 놓고 보시면 이해가 빠르니 시간날 때 한 번 그려보세요

포맷이 깨져서 다시 수정하다보니 틀린 내용이 있어서 일부 교정을 했습니다. 역시 전 멍청한가봐요.