기본 콘텐츠로 건너뛰기

2. 이산형 확률분포(이항, 다항, 포아송분포)

Ch2. 확률분포

첫 번째 챕터에서 확률변수의 개념을 말씀드리면서 확률변수는 가능한 값들에 대한 확률이 알려져 있고 그것을 계산하는 계산하는 함수가 확률함수(Probability Function)라는 것을 말씀드렸습니다. 그렇다면 이러한 확률들은 어떻게 알 수 있을까요. 그 확률변수들이 가지고 있는 확률의 구조를 알아야 하며 이 확률 구조를 흔히 확률분포(Probability Distribution)라고 합니다.

  • 이산형 확률변수 => 이산형 확률분포 => 확률질량함수(Probability Mass Function, Pmf)
  • 연속형 확률변수 => 연속형 확률분포 => 확률밀도함수(Probability Density Function, Pdf)

일반적으로 확률을 계산하는 대부분의 분석들은 이 확률분포와 그에 따른 확률함수를 이용한 분석들입니다. 앞으로 배우게 될 추정과 검정과 같은 통계분석 역시 이 확률분포를 통해서 하게 됩니다. 그렇지만 실제 데이터에서 정확히 일치하는 확률분포를 고안해 내기는 쉬운 일이 아닙니다. 이산형 확률분포는 데이터의 수집 상황에 따라 결정될 수 있으나 연속형의 경우는 사실 뚜렷한 방법이 없기에 얻은 데이터를 기반으로 추측하는 것이 대부분입니다. 하지만, 사람들이 실험과 연구를 하다보니, 수 많은 확률분포에서 특정한 패턴을 나타내는 분포들을 발견하였고, 이를 정리하여 이론을 성립했습니다. 이제부터 해당 확률분포들에 대해 알아보도록 하겠습니다.

 

이산형 확률분포

이산형 확률분포는 데이터가 수집되는 상황에 따라 결정될 수 있다고 했습니다. 이 말은 곧 어떤 식으로 데이터를 수집하냐 혹은 어떤 방식으로 데이터를 분류하냐에 따라 우리가 가장할 수 있는 분포의 종류가 바뀔 수 있다는 의미입니다.

  1. 이항분포(binomial distribution)

이항분포는 확률변수가 배타적인 두 가지 범주를 갖고 각 시행은 독립적인 경우에서의 분포입니다. 이 시행을 베르누이 시행이라고도 합니다.

여기서 독립적이라는 것은 각 시행이 다른 시행에 전혀 영향을 미치지 않는다는 것입니다. 간단한 예로 팀원 중 10주 동안 무작위로 돌아가면서 당직을 서는데 남자가 당식을 서는 횟수에 관심이 있다고 합시다. 성별은 남자, 여자 두 가지 경우만 상호 배타적으로 존재하므로 조건에 부합합니다. 그런데 만약 한 번 뽑힌 사람을 다음 당직 때 후보에서 제외하게 된다면 이는 각 시행이 독립적이지 않습니다. 그렇지 않고 계속 동일한 후보군에서 무작위로 뽑게 된다면 각 시행은 독립적이라고 할 수 있을 것입니다.

조금 더 상황을 일반화시켜 봅시다. 시행은 총 n번의 독립적인 베르누이시행에서 관심 있는 범주가 나올 확률이 p라고 해봅시다. 이런 조건들이 이항분포를 결정짓는 '상황'이며, 여기서 이항분포는 관심 있는 범주가 나오는 횟수 y를 확률변수로하는 분포입니다.

그럼 이제 이항분포의 확률함수를 만들어 볼 수 있습니다.

이 pmf를 통해서 관심 있는 범주가(편의상 성공이라고 하겠습니다.) n개중 하나도 나오지 않을 확률부터 n개 중 n개를 성공할 확률을 구할 수 있습니다. 또한 이러한 형태의 이항분포의 평균과 분산은 각각 np, np(1-p)입니다. 이를 다음과 같이 표현합니다.

  1. 다항분포(multinomial distribution)

다항분포는 이항분포의 확장입니다. 이항분포가 n번 시행에서 확률변수가 가질 수 있는 범주가 성공/실패 두 가지였다면, 다항분포에서는 n번 시행에서 확률변수가 가질 수 있는 범주가k가지로 확장됩니다. K=3인 경우인 다음 표를 보겠습니다.

 범주 1범주 2범주 3
확률변수:(각 범주의 갯수)x개y개(n-x-y)개
P(Y): (각 범주가 나올 확률)p1p2(1-p1-p2)

위의 경우는 총 n개의 독립적인 시행 중 범주1이 x개 범주2가 y개 나올 확률을 나타내는 다항분포입니다. n번 의 시행이니 당연히 마지막 범주는 n-x-y개가 될 것이고 확률은 1-p1-p2가 될 것입니다. 즉, 확률변수가 2개입니다. 한 분포에 꼭 확률변수가 한 개만 있으리란 법은 없습니다. 이를 확장해서 범주가 k개 있는 경우를 상상하면 k-1개의 확률변수를 갖는 확률분포가 됨을 짐작할 수 있습니다. 마지막 범주는 위 표처럼 나머지 범주에 종속되기 때문이죠.

범주가 k개인 다항분포의 확률함수를 봅시다.

여기서,

식은 조금 복잡하지만 어렵게 생각하실 필요가 없습니다.

그리고 그 범주의 조합을 곱해주어서 해당 확률을 구하는 것이죠. 이 역시 데이터의 상황이 분포를 결정합니다.

  1. 포아송분포(Poisson Distribution)

포아송분포는 조금 복잡한 상황을 전제로 합니다.

  • 이항분포 : n번 중 성공확률이 p일 때 성공 횟수를 확률변수로 하는 분포

  • 포아송분포 : 일정 단위에서 평균 성공 수가 m일 때 성공 횟수를 확률변수로 하는 분포

    여기서 일정 단위라고 함은 시간, 공간 등

예를 들어 어떤 공장에서 10시간(일정 단위)마다 평균적으로 2개의 불량품(평균 성공 수 m)이 발생된다면 불량품이 하나도 발생하지 않을 확률부터 수십, 수백개가 발생할 확률까지 성공 횟수에 따른 확률을 다루는 분포입니다.

포아송분포는우리 실생활에 정말 많이 적용될 수 있는 분포입니다. 빈도로 조사된 데이터는 전부 포아송분포를 적용하여 분석할 수 있기 때문이죠. 또한 포아송분포는 'n번 중 성공 횟수'의 분포인 이항분포와 매우 밀접한 관련이 있습니다. 이항분포의 평균은 np이고 이는 곧 '평균 성공 수'의 관점으로 바라 볼 수 있기 때문입니다. 포아송분포의 확률을 계산하는 확률함수는 다음과 같습니다.

포아송분포는 특이하게도 평균과 분산이 같습니다. 그래서 빈도 데이터에 적용하기가 적절하죠. 평균 빈도가 높다는 것은 그만큼 바운더리가 커진다는 것이고 바운더리가 커진다는 것은 분산이 크다는 의미라고 해석할 수 있습니다.

이 블로그의 인기 게시물

6.1.2 고수들이 자주 쓰는 R코드 소개 2편 [중복 데이터 제거 방법]

Ch2. 중복데이터 제거하기 및 데이터 프레임 정렬 Ch2. 중복데이터 제거하기 및 데이터 프레임 정렬 흔하지는 않지만, 중복으로 입력되는 데이터 셋을 마주치는 일이 생기기 마련입니다. 보통 중복데이터는 데이터 수집단계에서 많이 발생합니다. 하지만 이를 하나하나 엑셀로 처리하는 것은 한계가 있기때문에, R에서 처리하는 방법에 대해 다루어 보고자 합니다. 1차원 벡터, 리스트에서의 중복 제거 A = rep(1:10, each = 2) # 1 ~ 10까지 2번씩 반복 print(A) ## [1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 # 중복 제거 unique(A) ## [1] 1 2 3 4 5 6 7 8 9 10 데이터 프레임에서의 중복 제거 다음과 같은 데이터 프레임을 예시로 삼겠습니다. 변수 설명 OBS : 번호 NAME : 환자 이름 ID : 환자 고유번호 DATE : 검사 날짜 BTW : Body total water 먼저, 환자 이름이 있고, 그 환자의 고유 ID가 있습니다. 세상에 동명이인은 많기 때문에 항상 고유 ID를 기록해둡니다. # 데이터 불러오기 DUPLICATE = read.csv("C:/R/DUPLICATED.csv") DUPLICATE ## OBS NAME ID DATE BTW ## 1 1 A A10153 2018-11-30 1 ## 2 2 A A10153 2018-11-30 3 ## 3 3 B B15432 2018-11-30 4 ## 4 4 A A15853 2018-11-29 5 ## 5 5 C C54652 2018-11-28 5 ## 6 6 C C54652 2018-11-27 6 ## 7 7 D D14

4.4.1 R 문자열(TEXT) 데이터 처리하기 1

Ch4. 문자열 데이터 다루기 1 데이터 다운로드 링크: https://www.kaggle.com/PromptCloudHQ/imdb-data # 데이터 불러오기 DATA=read.csv("C:\\R/IMDB-Movie-Data.csv") Ch4. 문자열 데이터 다루기 1 이번에는 문자열 데이터를 처리하는 방법에 대해 다루겠습니다. 문자열을 다룰 때 기본적으로 숙지하고 있어야 하는 명령어는 다음과 같습니다. 문자열 대체 : gsub() 문자열 분리 : strsplit() 문자열 합치기 : paste() 문자열 추출 : substr() 텍스트마이닝 함수: Corpus() & tm_map(), & tdm() # 문자열 추출 substr(DATA$Actors[1],1,5) # 첫번째 obs의 Actors변수에서 1 ~ 5번째에 해당하는 문자열 추출 ## [1] "Chris" # 문자열 붙이기 paste(DATA$Actors[1],"_",'A') # 첫번째 obs의 Actors변수에서 _ A 붙이기, 기본적으로 띄어쓰기르 구분 ## [1] "Chris Pratt, Vin Diesel, Bradley Cooper, Zoe Saldana _ A" paste(DATA$Actors[1],"_",'A',sep="") # 띄어쓰기 없이 붙이기 ## [1] "Chris Pratt, Vin Diesel, Bradley Cooper, Zoe Saldana_A" paste(DATA$Actors[1],"_","Example",sep="|") # |로 붙이기 ## [1] "Chris Pratt, Vin Diesel, Bradley Cooper, Zoe Saldana|

3. Resampling 방법론(Leave one out , Cross Validation)

Ch4. Resampling 방법론 이전 챕터에서는 앙상블에 대해 다루었습니다. 앙상블을 요약하자면, Training Set을 Resampling할 때 마다, 가중치를 조정할 것인지 말 것인지를 다루는 내용이었습니다. 이번에는 구체적으로 Resampling 방법들에 대해 다루어 보고자 합니다. 1. Resampling의 목적과 접근 방식 모형의 변동성(Variability)을 계산하기 위해서 입니다. Training Set으로 모형을 만들고, Test Set으로 Error rate를 계산하며, 이를 반복합니다. 각 실행 별, Error Rate 값이 계산이 될 것이며, 해당 Error rate의 분포를 보고 모형의 성능을 평가할 수 있습니다. Model Selection : 모형의 성능을 Resampling 방법론을 통해 평가한다면, 모델링 과정에서 어떤 변수를 넣어야 하고, 혹은 모형의 유연성(Flexibility)을 어느정도로 조절하는 것이 적당한지 결정을 할 수 있기 때문에 매우 중요한 방법론 중 하나입니다. 모형의 유연성에 대해서는 다음 챕터에서 설명하도록 하겠습니다. 2. Leave-One-Out Cross Validation(LOOCV) LOOCV는 n개의 데이터에서 1개를 Test Set으로 정하고 나머지 n-1개의 데이터로 모델링을 하는 방법을 의미합니다. LOOCV 방법은 데이터 수 n이 크다면, n번의 모델링을 진행해야되기 때문에, 시간이 오래 걸립니다. 회귀, 로지스틱, 분류모형 등에 다양하게 적용할 수 있습니다. 3. K - Fold Cross - Validation 연산시간이 오래걸린 다는 것은 곧, 작업시간이 길어진다는 의미이며 이는 곧 야근을 해야된다는 소리와 다를게 없어집니다. 그래서 시간이 오래걸리는 LOOCV를 대채하기 위하여 K-Fold Cross - Validation이 존재합니다. 위 그림은 데이터 셋을 총 4개의 Set로 구성하였습니다. Cross -

4. 통계적 추정(점추정,구간추정)

Ch1. 점추정 추정량은 우리가 알고 싶어하는 모수를 표본들을 이용하여 단 하나의 점으로 추측하는 통계량입니다. 그 과정을 점추정(Point estimation)이라고 하며, 그렇게 얻어진 통계량을 점주청량(Point estimator)라고 합니다. 점추정량은 다양한 방식으로 구할 수 있습니다. 모평균을 추정하기 위한 표본평균 계산 각 끝의 일정 부분씩은 무시하고 나머지 표본들의 평균 계산(절삭 평균, Trimmed Mean) 등의 방법들이 있습니다. 하지만 가장 많이 쓰는 척도는 표본평균입니다. 그 이유는 대표적으로 수리적인 확장성과 표본평균의 분포를 비교적 쉽게 알 수 있다는 점을 들 수 있습니다. 점추정은 단순히 모평균을 추정하는 것만이 아닌, 회귀식을 추정하였을 때의 회귀계수도 점추정이라고 할 수 있습니다. (회귀분석은 후에 다룰 예정입니다.) 다만, 이런 점추정에도 몇 가지의 장점과 단점이 있습니다. 점추정의 장점 점추정량은 지극히 직관적이다. 통계를 모르는 누군가가 한국의 30대 여성의 평균 수입을 묻는다면 점추정량으로 즉각적인 답을 줄 수 있을 것입니다. 점추정량은 매우 직관적이며 합리적입니다. 점추정량은 우리가 원하는 수치를 대체할 구체적인 값을 제시해준다. 우리가 통계적인 모델링 혹은 함수를 작성하기 위해 30대 여성 수입의 평균치가 필요하나 모평균을 알 수 없을 때 점추정량으로 간단히 대체할 수 있습니다. 사실상 이는 대부분에 통계이론을 전개하는데 가장 중요한 역할을 합니다. 간단한 예를 말씀드리자면 모분산을 추정하기 위해서는 평균이 필요하기 때문에 표본평균을 이용합니다. 여기서 분산은 각 개별 값들이 평균에서 얼만큼 멀리 떨어져있는지에 대한 척도입니다. 그런데 우리는 '진짜 평균'을 알 수 없으니 아래 식과 같이 표본들의 평균으로 대체하는 것입니다. 여기서 평균 값을 표본평균으로 대체하였기에 표본분산은 n이 아닌 n-1으로 나누어 주게 됩니다. 이해를 돕기 위해 자유도에 대한 개념을 잠깐 다루도록 하

3.2.3 R 시각화[ggplot2] 2편 (히스토그램, 밀도글래프, 박스플롯, 산점도)

R 데이터 시각화 2편 R 데이터 시각화 2편 데이터 다운로드 링크: https://www.kaggle.com/liujiaqi/hr-comma-sepcsv # 시각화 이전에 처리 되어 있어야 하는 시각화 DATA = read.csv('C:/R/HR_comma_sep.csv') DATA$left = as.factor(DATA$left) DATA$Work_accident = as.factor(DATA$Work_accident) DATA$promotion_last_5years = as.factor(DATA$promotion_last_5years) 히스토그램(Histogram) [연속형 변수 하나를 집계 내는 그래프, 1차원] 히스토그램은 연속형변수를 일정 범위로 구간을 만들어, x축으로 설정하고 y축은 집계된 값(Counting)을 나타내는 그래프입니다. library(ggplot2) # 기본 ggplot(DATA,aes(x=satisfaction_level))+ geom_histogram() ## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`. # 구간 수정 및 색 입히기 ggplot(DATA,aes(x=satisfaction_level))+ geom_histogram(binwidth = 0.01,col='red',fill='royalblue') # col은 테두리, fill은 채우기 밀도그래프(Density Plot)[연속형 변수 하나를 집계 내는 그래프, 1차원] 밀도그래프는 연속형변수를 일정 범위로 구간을 만들어, x축으로 설정하고 y축은 집계된 값(percentage)을 나타내는 그래프입니다. # 기본 ggplot(DATA,aes(x=satisfaction_level))+ geom_density() # 색 입히기 ggplot(DATA,a