이번에는 통계에 관한 이야기를 조금 해보려고 한다. 아무래도 통계를 전공한 사람은 아니다보니 뭔가 어설플 수도 있으나 이해해 주시라. 이번 포스팅에서 이야기할 내용은 confidence level이다.
confidence level은 "얼마나 확신하냐?"이다. 예를 들어 내가 턱걸이를 몇 개 하는지 누군가에게 맞춰보라고 했다. 그 사람은 100% 확실한 정답을 말할 수 있을까? 있다!! "너? 한.. 0개에서 1000개 사이하겠지 뭐~" 당연한 이야기이다. 아마도 턱걸이 1000개 이상 할 수 있는 사람은 없을 것이므로, 0개에서 1000개 사이라고 대충 때려 이야기하면 100% 정답이다. 그런데 어떤 사람은 이렇게 이야기 할 수도 있다. "5개에서 10개 사이" 이 사람이 정답일 확률은 어떻게 될까? 아까 100% 보다는 확실히 작을 것이다. 한.. 60%라고 치자. 세번째 사람은 조금 더 디테일하게 이야기한다. "8개에서 9개 사이" 이 사람이 정답일 확률은 더 적겠지? 한 30%?
그렇다 Confidence level은 어떤 값 X가 N%의 확률로 a와 b 사이에 있을 확률을 의미한다. 이제 조금 더 현실적인 이야기를 해보자. 어떤 classifier에 대하여 0.95라는 accuracy가 측정되었다고 해보자. 이 classifier에 대하여 96%에 해당하는 confidence level을 구하라고 하면, 예를 들어 0.93 - 0.98이 될 것이다. 즉 classifier의 accuracy가 항상 0.95가 나오는 것은 아닐 것이다. 그렇지만 어떤 방법으로 계산을 했을 때, 이 classifier는 96%의 확률로 항상 accuracy 0.93에서 0.98을 나타낼 수 있다는 것이다. 다른 말로 말하면 accuracy가 0.93에서 0.98 사이에 나타나지 않을 확률은 4%밖에 안 된다는 것이다.
자 confidence level에 대해서는 이렇게 대략적으로 개념을 잡았으니, 이것을 구체적으로 어떻게 계산하는지부터 설명해보자. 계산법은 아주 간단하다.
평균을 기준으로 플러스/마이너스 Zn*표준편차를 해주는 것이다. 이 식은 고등학교에서 많이 봤을 것이다. 정규분포 공부할 때 많이 봤을 것이다. 읭? 갑자기 왠 정규분포? 우선 정규분포 이야기를 빼고 위의 평균과 표준편차를 구하는 것에 집중하자. 하나하나씩 구해서 집어넣어보자.
그런데 저 평균을 구하기 위해서 조금 원론적인 이야기부터 해보자. 우선 sample erorr와 true error이다. 말 그대로 sample error는 sample로부터의 error rate이다. 전체 D개의 data에서 n개의 sample을 추출해서 각 N개에 대하여 옳고 그름을 따져보자.
가령 50개의 data에서 5개만 sample로 뽑아서 실제 값(h(x))과 예측된 값(f(x))을 비교했더니 5개 중에 2개 에러가 났다. sample error는 0.4가 되겠다. 그러면 true error는 무엇이냐? true error는 전체 data에서 하나를 random을 뽑았을 때 그것이 misclassify될 확률이다. 뭐 따지고 보면 sample error랑 개념이 비슷하다.
그러면 우리한테 D개의 동전이 있다고해보자. 여기서 n개를 뽑아서 (n < D) 동전을 던져보자. 앞면이 나올 확률을 p라고 놨을 때, 우리가 기대할 수 있는 평균값은 아래와 같다.
가령 40번 던져서 0.6의 확률로 앞면이 나왔다면 24이라는 expected head count를 얻는데, 이 말은 40번 중에서 평균적으로 24번정도의 앞면을 갖게 된다는 이야기이다. 즉 이것에 평균이다. sample data에서 평균을 구하는 공식은 np가 된다. 분산과 표준편차 공식은 아래와 같다.
p를 그래프로 나타내면 아래와 같다.
여기서 중요한 것을 하나 말해보자. n이 충분히 커지면 위의 값들은 normal distribution(정규분포)의 평균/분산/표준편차와 거의거의 같아진다는 것이다. 즉 n이 충분히 커지면 그 p는 정규분포 형태의 모형을 띈다는 것이다. 그런데 n이 충분히 크다는 것을 어떻게 아냐?
위의 공식을 만족시키는 n에 대하여 정규분포를 이뤘다고 가정하고 평균/분산/표준편차를 sample의 평균/분산/표준편차로 간주하고 계산해도 된다는 것이다. 즉 n이 충분히 크면 sample들 역시 정규분포를 이루게 된다. 자 그러면 confidence level에 대하여 식을 치환해보자. 여기서 평균은 np가 아니라 그냥 p이다. 왜냐하면 각 sample의 평균이 np였고 지금 우리가 구하는 것은 sample들의 평균이므로 np를 n으로 나눠준다. 분산 역시 n으로 나눠줘야 하고 결국 표준편차는 sqrt(n)으로 나눠주게 되는 꼴이 된다. 따라서 아래와 같은 식이 나온다.
마지막으로 Zn은 confidence level table을 통해 확인하면 되는 값들이다.
98%의 confidence level을 구하고 싶으면 2.33을 곱해주면 된다.
자 마지막으로 예를 들어보자. 내 포스팅에 예가 없으면 섭하다.
1000개의 data에서 100개를 뽑아서 classifier를 돌렸더니 80개가 맞았다. 이것에 대한 95% confidence level을 구하면?
p = 0.8
standard deviation = sqrt(0.8*0.2)/10 = 0.04
95% confidence level N = 1.96
confidence level = 0.8 - 1.96*0.04 ~ 0.8 + 1.96*0.04 → 0.7216 ~ 0.8784
이렇게 된다. 후, 내가 아무래도 수학에 기초가 없다보니까 좀 맞나 싶은 내용들도 있을지도 모른다. 이번 포스팅을 할 때는 한글 블로그도 조금 참고했다. 정말 설명 잘 해놓은 블로그 많더라
http://gongsin.com/bbs/board.php?bo_table=gongsin_column_bbs&wr_id=250458
http://dermabae.tistory.com/184
참고하시길 바라며, 다음 포스팅은 cross validation에 대해서 포스팅할 생각이다.
'Data Mining' 카테고리의 다른 글
[Data Mining] EM algorithm (1) | 2016.04.06 |
---|---|
[Data Mining] k-fold cross validation (2) | 2016.04.02 |
[Data Mining] Ensemble : Bagging, Random Forest and Boosting (1) | 2016.04.01 |
[Data Mining] HMM : Forward algorithm and Viterbi algorithm (1) | 2016.03.30 |
[Data Mining] Markov Chain and Hidden Markov Model (2) | 2016.03.30 |