Data science (101)

반응형

다중 비교 (Multiple comparison) 문제와 보정 방법 


본 포스팅에서는 다중 비교가 무엇인지, 어떤 방법으로 보정할 수 있는지를 알아보겠습니다. 다중 분석이 문제가 된다는 점을 이해하기 위해 먼저 예를 설명하겠습니다.폐암과 연관성이 있는 요인을 찾기 위한 연구를 수행한다고 해봅시다. 예를 들어, 나이, 체질량 지수, 식습관, 음주습관, 운동량 등 100 가지의 요인에 대해 폐암과의 연관성을 유의 수준 0.05 하에서 비교하고자 합니다. 이를 위해 폐암 환자와 정상인을 수집했고, 연속형 변수에 대해서는. T-test, 범주형 변수는 카이제곱 검정을 수행하여 최종적으로, 운동량, BMI, 학력, 우유 섭취량, 경제력이 폐암과 연관성이 있다고 나왔다고 합시다. 이 때, 이 변수들이 폐암과의 연관성이 있다고 결론 내릴 수 있을까요? 물론 각각의 검정은 유의 수준 0.05 하에서 검정한 것이기 때문에, 연관성이 실제로 있을 가능성이 높은 것이 사실입니다. 하지만 100가지 요인에 대한 검정을 하나의 연구로 볼 때, 모든 변수가 연관성이 실제로 없더라도 평균적으로 5개의 잘못된 결과를 얻게 됩니다. 만약에 이러한 잘못된 결론이 학계에 보고되면 잘못된 과학적 결론을 내릴 수 있습니다. 따라서, 개별 검정 뿐 아니라 한 연구의 에러를 줄이는 방법이 필요합니다. 즉, 한 연구에서 나올 수 있는 잘못된 결과를 줄이자 라는 것이 다중검정 보정의 핵심입니다. 


여기서 family-wise type 1 error 의 개념이 등장합니다. Family-wise type 1 error rate (FWER) 란 한 연구에서 적어도 한 개의 잘못된 결론 (false positive)이 나올 수 있는 확률을 의미합니다. 만약 이것이 0.05 라면 한 연구에서 적어도 1개의 잘못된 결론이 나올 확률이 0.05 라는 것입니다. FWER 를 통제하는 방법으로 잘 알려진 것이 본페로니 보정 방법입니다. 본페로니 보정은  test 의 수가 n 이고, FWER 를 0.05 로 통제할 때, 개별 테스트의 유의수준을 alpha/m 으로 설정시킵니다. 모든 검정이 실제로 연관성이 없는 경우 (null 인 경우), 아래 식이 m 이 클 수록 대략적으로 만족됩니다. 


$$ FWER= 1-(1-\alpha/m)^m = \alpha  $$


<본페로니 방법을 통한 FWER 통제>


하지만 본페로니 방법의 문제는 너무 보수적 (strict/conservative) 이라는 것입니다. 보수적이라는 뜻은 귀무가설을 웬만해선 기각하지 않는다는 것으로, false positive 는 상당히 줄일 수 있지만, false negative 는 많아지게 됩니다. 예를 들어 test 의 개수가 1000개인데, 연관성이 없는 것이 900개, 연관성이 있는 것이 100개 일 때, 900개 중에 1개라도 잘못나올 확률은 1-(1-0.05/1000)^900 < 0.05 입니다. 물론 false positive 가 적어져서 좋긴 하지만, false negative 가 많아진다는 문제가 생깁니다. 따라서, 다중 비교 검정의 핵심은 어떻게 false positive 를 줄이면서, false negative 도 줄일 수 있는가? 입니다.


다중 검정 보정 방법


그러면 어떻게 false positive, false-negative 의 타협을 보는가 (FWER 은 본페로니 수준이면서, false negative 를 줄일 수 있는가)에 문제에 있어서 도입되는 한 가지 방법이 바로 multi-step 보정 방법입니다. Multi-step 보정법은 step-down 방법, step-up 방법으로 나뉘는데, 예를 들어, step-down 방법은 Holm's 방법, step-up 방법은 Hochberg 방법이 있습니다. 이러한 multi-step 보정 방법은 fwe 는 그대로 두면서 false negative 는 줄이는 방법으로 알려져 있습니다. 이를 수리적으로 보이는 것은 다소 어렵지만 simulation 을 통해서 bonferonni 방법보다 효율적이라는 것이 많이 알려져 있습니다. Multi-step 보정 방법은 모든 검정에서 나온 p-value 를 정렬 (sorting) 한 후, 각 검정마다 각기 다른 p-value cutoff 를 적용시키는 방법입니다. Step-down 방법은 p-value 가 가장 작은 검정부터, step-up 방법은 p-value 가 큰 검정부터 귀무가설 기각 여부를 보게됩니다. 


FWER 이 아닌 False Discovery Rate (FDR) 을 줄이는 방법이 최근 많이 사용되고 있습니다. FDR 을 다중검정에서 사용할 때의 의미는 false postive, false negative 를 줄이는데 집중할 것이 아니라, 내가 귀무가설을 기각한 검정 중 틀린 것 (false positive/true positive+false positive = discoveries) 의 비율을 줄이자는 것입니다. 최근 FDR 통제에 많이 쓰이는 방법 중 하나가 Benjamin-Hochberg 방법입니다. 이 방법은 FDR 를 잘 통제한다고 알려진 방법입니다. 


$$ FDR = \frac{false_{positive}}{true_{positive}+false_{positive}} $$


Holm's 방법, Hochberg 방법, Benjamin-Hochberg 방법 모두 간단하며, 검색해보면 쉽게 알 수 있기 때문에 본 포스팅에서는 따로 설명하지 않고, 아래 시각적으로 설명한 그림을 첨부하였습니다. Benjamin-Hochberg 방법의 경우 이전 제 포스팅에서 설명했습니다.



 

<Holm's, Hochberg, Benjamin-Hochberg Procedure 의 비교>



다중 검정 보정이 필요한 상황


1. 수많은 요인들에 대한 연관성 분석을 수행할 때


이 예로는 유전체학 분야를 들 수 있습니다. genomics 분야에서 microarray 와 같은 high-throughput 기술의 발달됨에 따라, 수많은 유전자 변이 마커, 유전자 발현 (gene expression) 과 표현형의 연관성을 보는 연구가 수행되었습니다. 이러한 Genomics 분야의 발전은 다중 검정 보정이 생겨난 이유이기도 합니다. 일반적으로 한 사람에서 300만개의 단일염기다형성 (single-nucleotide polymorphism) 이 있습니다. 이러한 마커들과 질병의 연관성을 보는 연구에서 multiple comparison 문제가 생길 수 밖에 없고, 수 많은 false positive 가 생기게 됩니다. 이 분야의 default 라고 얘기할 수 있는 보정 방법은 FDR 을 통제하는 Benjamin-Hochberg 방법입니다. 


2. 임상 시험 


임상 시험의 수많은 상황에서 다중 비교 문제가 생기게 됩니다. 신약 개발을 예를 든다면, 아래와 같은 상황이 발생할 수 있습니다. 


1) 비교 그룹 수가 3개 이상인 경우 :ANOVA 검정 후 유의해서, 사후검정을 할 때, 다중 검정이 발생하게 됩니다. 예를 들어, 대조약, 저투여군, 고투여군 3그룹을 비교할 때 생길 수 있습니다. 이러한 임상시험 세팅에서는 다중성을 반드시 보정해주어야합니다. 


2) 하위군 분석 : 임상 시험 대상자를 어떤 공변량을 기준으로 하위군으로 나누어 신약의 효과를 평가할 때 발생합니다. 대표적으로 다중 검정이 발생하는 사례로, 하위군 분석 결과를 확증적으로 인정받기 위해서는 임상시험계획서에 이를 명기하고 다중검정 보정법을 제시해야합니다. 


3) 중간 분석 : 임상 시험에서 시험 기간이 종료되기 전에 중간에 데이터를 오픈해서 테스트를 하는 경우도 있습니다. 이 경우도 대표적으로 다중 검정이 발생하는 사례로, 각 절차에서 O-brien fleming 방법을 사용한 다중검정 보정법이 종종 사용됩니다.

반응형
반응형


잘 정리된 사이트가 있어 공유합니다. H-index 기준 1위 CVPR, 2위 NIPS, 3위 EECV, 4위 ICML, 5위는 얼마전 서울에서 열렸던 ICCV 네요. 





무엇을 기준으로 한지는 잘 모르겠으나, 아래와 같이 Conference 와 Journal 의 Rank 를 분류한 자료도 있습니다. SIGIR, WWW, ACL, KDD, AAAI, IJCAI, ICML, NIPS, ICLR가 아래 기준 Rank 1 에 속한 conference 들입니다. 


Conference Ranking 

Read all the relevant papers from major top proceedings/journals. Read, read and read! 
Find new ideas, Do solid research, Publish top papers, Get professional internships/jobs! 
Rank 1 (CCF-A): SIGIR, WWW, ACLKDD, AAAI, IJCAI, ICML, NIPS, ICLR.
Rank 2 (CCF-B): CIKM, WSDMEMNLP.
Rank 3 (CCF-C): ECIR, NAACL.
SIGIR-sponsored conferences:  SIGIR, CIKM, WSDMICTIR, CHIIR.
A better computer science department ranking list based on top conference publications: http://csrankings.org.

Best Paper Awards in Top Computer Science Conferences 
Best Papers vs. Top Cited Papers in Computer Science (since 1996)
Google CS Conference&Journal Ranking (IR&Search&Web&DB)
Google CS Conference&Journal Ranking (Core IR)
Google CS Conference&Journal Ranking (NLP)
Google CS Conference&Journal Ranking (DM)
Google CS Conference&Journal Ranking (ML&AI)

Most Cited Papers in Top Conferences in Recent 5 Years:
IR/Web: SIGIR, WWW, CIKM, WSDM
NLP: ACL, EMNLP, NAACL
ML/DM: ICML, NIPSKDDAAAI, IJCAI, ICLR
Most Cited Computer Scientists by H Index
Citations Statistics of Top Computer Science Researchers by Prof. Jimmy Lin
Number of submissions and acceptance rate of NLP conferences

Journal Ranking 

Rank 1

Rank 2
  • ACM Transactions on Intelligent Systems and Technology(TIST)
  • Information Processing & Management (IPM)
  • Information Retrieval (IRJ)
  • Journal of the American Society for Information Science and Technology (JASIST)


참고


https://sites.google.com/site/lyangwww/resources?tmpl=%2Fsystem%2Fapp%2Ftemplates%2Fprint%2F&showPrintDialog=1

http://www.guide2research.com/topconf/machine-learning

https://jackietseng.github.io/conference_call_for_paper/conferences.html

반응형
반응형

딥러닝 분야별 State-of-the-art (SOTA) 브라우저


딥러닝 분야 (Image Classification, Semantic Segmentation, Object Detection, Medical 등) 별 SOTA 알고리즘을 확인할 수 있는 사이트를 찾게 되어 공유합니다. Data set 별로 가장 성능이 좋은 방법들을 나열해놓고 있습니다. 최신 기술의 업데이트를 한 곳에서 확인할 수 있어 매우 유용한 사이트인것 같습니다. Semantic Segmentation 분야의 경우, DeepLab 이 최신 기술이라고 알고 있었는데 이외에도 들어보지 못한 ACNet, HRNet 등의 방법들도 좋은 성능을 내고 있네요.

https://paperswithcode.com/sota?fbclid=IwAR16wLSr-BAcl-eZAwMVIHdsmpgBF6dN4ETR5kRGg02f_5xBBOlN6uMapo4

반응형
반응형


일반 Softmax 함수 


import tensorflow as tf
import numpy as np

z = [1,2,3,4,5,6]

def softmax(a) : 
    c = np.max(a) 
    exp_a = np.exp(a-c) 
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    return y

q = softmax(z)


Softmax with Temperature Parameter


def softmax_with_temperature(z, T) : 
    z = np.array(z)
    z = z / T 
    max_z = np.max(z) 
    exp_z = np.exp(z-max_z) 
    sum_exp_z = np.sum(exp_z)
    y = exp_z / sum_exp_z
    return y

calibrated_q2 = softmax_with_temperature(z, 2)
calibrated_q10 = softmax_with_temperature(z, 10)


Temperature 를 크게 줄 수록 각 확률 값들의 차이가 줄어듬을 확인할 수 있음

하지만, 순서는 변하지 않기 때문에 정확도에 영향을 주지 않음 


fig = sns.barplot(x=np.array([0,1,2,3,4,5]), y=q)
fig.set(ylim=(0,1))
plt.show()

fig2 = sns.barplot(x=np.array([0,1,2,3,4,5]), y=calibrated_q2)
fig2.set(ylim=(0,1))
plt.show()

fig3 = sns.barplot(x=np.array([0,1,2,3,4,5]), y=calibrated_q10)
fig3.set(ylim=(0,1))
plt.show()


반응형
반응형

[논문리뷰] 현대 딥러닝의 Calibration 에 대하여



현대 Neural network 의 calibration 에 관하여라는 논문을 리뷰하여 포스팅하겠습니다. 딥러닝의 성능 (performance) 이라 하면 일반적인 용어 '정확도' 를 뜻하는 경우가 많습니다. 그 정확도란 1) 예측 한 것중에 얼마나 맞았는가? 2) 데이터가 얼마나 잘 분류가 되었는가? 두 관점이 있으며, accuracy, precision (positive predictied value), recall (sensitivity)f1-score (precision 과 recall 의 조화평균) 등 대표적이고 많이 사용되는 measure 라고 할 수 있습니다. 하지만 calibration 도 정확도 못지 않게 중요한 성능이라고 할 수 있습니다. 본 논문에서는 '현대 뉴럴넷' 이 과거의 뉴럴넷보다 정확도는 향상되었지만, calibration 이 좋지 않다 (poorly calibrated) 라는 점을 문제로 삼으며, post-processing calibration method temperature scaling 을 제시하고 있습니다.


Calibration 이란?


Calibration 이란 모형의 출력값이 실제 confidence (또는 이논문에서 calibrated confidence 로 표현) 를 반영하도록 만드는 것입니다. 예를 들어, X 의 Y1 에 대한 모형의 출력이 0.8이 나왔을 때, 80 % 확률로 Y1 일 것라는 의미를 갖도록 만드는 것입니다. 일반적으로 현대 딥러닝은 overconfident 합니다. 아래 그림은 1998 년 제시된 LeNet 과 2016년 제시된 ResNet (110 layer) 의 calibration 을 비교한 그림입니다. LeNet 의 경우 모형의 출력이 0~1 사이에 균일하게 분포되어있는 것을 볼 수 있지만, ResNet 의 경우 1 근처에 집중되어 있다는 것을 볼 수 있습니다. 그 결과로 아래 그림을 보면, ResNet 의 경우, confidence 와 accuracy가 많이 어긋난다는 것을 볼 수 있습니다. 모형의 출력이 실제 confidence 를 반영한다면 (calibrated confidence), confidence 와 accuracy 가 일치해야합니다. 


왜 Calibration 이 중요한가? 


모형의 예측값이, 실제 확률을 반영하는 것 (Calibration) 은  중요합니다. 딥러닝이 실제 세계에 응용될 때, 의사결정 프로세스의 하나의 구성요소가 되는 경우가 많습니다. 예를 들어, 의학적 진단 (computer-aided diagnosis)을 예로 들어보면, 딥러닝을 전적으로 신뢰해서 모든 판단을 딥러닝에 맡기는 식으로 의사결정이 이루어지는 경우는 적습니다. 딥러닝 모델의 confidence 가 낮은 경우에만 사람이 보는 방식으로 사람의 노동력을 줄이거나, false negative 가 치명적인 암 진단과 경우에는, cancer negative 로 예측한 것들 중, confidence 가 낮은 것만 사람이 재확인 하는 방식으로 하는 것도 가능합니다. 결국 이러한 의사 결정이 가능하기 위해서는 모형의 confidence 를 보는 것이 필요하고 이 confidence가 calibrated confidence 여야지 그 값에 신뢰성이 있다고 할 수 있습니다. 


Calibration Measures


모형의 Calibration 이 잘되었는지를 어떻게 확인할 수 있을까요? 논문에 나와있는 3가지 measure 를 정리해보았습니다. 


1) Reliability Diagram


Reliability diagram 은 expected accuracy 와 observed accuracy 를 각각 x, y 축으로 하여 그린 그래프를 말합니다. 이 때, expected accuracy (confidence) 를 기준으로 bin 을 쪼개서 (ex. decile) 각 bin 에서 observed accuracy 를 아래와 같이 구함으로써 그래프를 그릴 수 있습니다. 




파이썬 코드로 Reliability diagram 그리는 법을 참고 바랍니다. 


2) Expected Calibration Error (ECE) 



ECE 는 confidence와 실제 accuracy 의 차이의 기댓값으로 연속형 변수에서 이를 실제로 구할 수 있는 방법은 없습니다. 따라서 "binning" 을 통해 위와 같이 approximation 됩니다. ECE는 M 개의 bin 에 대하여 각 bin 마다의 expected accuracy 와 confidence 의 차이를 가중 평균 (weighted mean) 한 것입니다. 이 때 가중치는 위 식에 나와있듯, bin 의 sample size / 전체 sample size 입니다. 



3) Negative log likelihood



Negative log likelihood 는 통계 모형의 quality 를 평가하는데 표준적으로 많이 쓰이는 measure 입니다. 딥러닝/머신러닝 분야에서는 cross-entropy loss 라고도 불립니다 (분류 문제에 있어서). 이러한 log likelihood 와 cross-entropy 와의 관련성은 제 블로그 포스팅에서도 다룬적이 있으니 참고 바랍니다. Logistic regression 은 이 negative log likelihood 를 최소화 하는 계수를 찾게되며, 딥러닝도 cross-entropy 를 손실함으로 놓는다면, 마찬가지입니다. NLL 은 calibration 을 의미하는 measure 로 보기는 어려우나, calibration 도 어느정도 반영하고 있다고 볼 수 있습니다.  



현대 딥러닝 기법과 Calibration 의 관계


본 논문에서는 Model capacity 와 Regularization 방법이 miscalibration 과 관계가 있다는 실험 결과를 제시하고 있습니다. 하지만 이 부분에 대해 인과성을 단정할 수는 없습니다. 


1) Model capacity


최근 등장하는 딥러닝 모형들은 매우 많은 layer 를 갖고 있습니다. 적게는 수백개에서부터 수천개의 layer 가 있으며, layer 마다 수백개의 convolution filter 가 사용됩니다. 최근 연구에 따르면, 많은 layer 를 가질 수록 traninig set 의 특징을 더욱 잘 학습하고, generalization 도 더 좋다는 것을 보여주었습니다. 



위 figure 에서 가장 왼쪽 그림은 ResNet 에 대하여 64개의 filter 로 고정 후, depth 를 올리면서 error와 ece를 관찰한 그림입니다. depth 가 증가할 수록 error 는 줄어들지만 ECE는 증가하는 것을 확인할 수 있습니다. 왼쪽에서 두 번째 그림은 depth 를 고정시킨 후, filter 의 수를 증가시키면서 error와 ece 를 관찰한 것인데, 마찬가지로 error는 줄어들지만 ece 는 증가합니다. 후반부에는 유지되지만 초반부에 매우 빠르게 ece 가 증가하는 것을 확인할 수 있습니다. 즉, model capacity 가 클 수록 ece는 증가합니다. 이 이유는 모델이 training set 에 대한 loss 를 최소화하는 방향으로 학습되기 때문입니다. 그렇기 때문에 training set 을 완벽하게 분류할 수 있기 되더라도 loss 를 줄이기 위하여 confidence 를 높여 1에 가까운 값을 예측하기 때문입니다. 따라서 test set 에 대해 예측할 때도 마찬가지의 현상을 보이게 됩니다.  


2) Batch Normalization (BN)


Batch normalization 방법은 distribution shifts in activations 을 최소화해서 딥러닝의 optimization 및 regularization 을 향상시키는 방법입니다. batch normalization 의 도입은 매우 깊은 모델 (resnet, densenet 과 같은) 을 학습시킬 수 있는 한 가지 breakthrough 였습니다. 위 figure 의 3번째 그림을 보면 BN 이 calibration 에 미치는 영향을 볼 수 있습니다. 결론은 BN 의 도입은 calibration 을 낮추며, 원인은 알 수 없다는 것입니다. 


3) Weight decay 


BN 의 도입 이후 최근 weight decay 가 많이 쓰이지 않는 regularization 방법입니다. BN 논문에서 L2 regularization 를 쓰지 않는게 일반화에 도움이 된다는 내용이 보고되기도 했습니다. 따라서 최근에는 weight decay 를 과거와 비교하여 매우 작게 주는 것이 일반적입니다. 하지만 안타깝게도 이것은 calibration 에 좋지 않은 영향을 준다고 합니다. 위 figure의 가장 오른쪽 그림을 보면 weight decay 를 크게 줄 수록 오히려 ece 가 좋아지며, weight decay 가 적을 수록 ece 가 증가합니다. 직관적으로도, weight decay 가 적으면 training set 에 대해 loss 를 최소화 시키는 weight 가 얻어지는 것이기 때문에 test set 에 대해 overconfident 한 모델이 얻어질 것이라는 것을 짐작할 수 있습니다. 


Calibration 방법 


Post-processing calibration 은 모델의 예측 확률로부터 Calibrated probability 를 구하는 과정입니다. 이 방법은 validation set 이 필수적으로 필요합니다 (물론 이 validation set 은 training 할 때 쓰인 validation set 과 같은 set 이어야 합니다.).


Post-processing calibration의 목적은 모델의 예측값 p 로부터 calibrated probability q 를 구하는 것입니다. 간단하게 positive class, negative class 로 나뉘어진 binary prediction 을 예로 들어봅시다. 첫 번째로 소개할 방법은 Histogram binning 방법입니다. 


1) Histogram Binning : Zadrozny 는 2001 년 ICML 에서 decision trees and naive bayesian classifier 의 예측값을 calibration 하는 방법을 제시했습니다. Histogram binning 은 매우 간단하고 직관적인 calibration 방법으로 non-parametric calibration 방법입니다. 절차는 아래와 같습니다. 


1) 예측값을 M 개의 bin 으로 쪼갭니다. bin 을 쪼개는 방법은; 1. 같은 interval 로 쪼개기 2. sample 수로 쪼개기가 있습니다. 

2) 이후에 Bin 마다 Score 를 구합니다. 

3) Score 는 bin-wise squared loss 를 최소화하는 방법으로 선택됩니다. 


* Bin-wise squared loss


여기서 1은 indicator function 입니다. 이를 최소화하는 theta1~theta_m 을 구해서 이를 bin 마다의 score로 쓰는 것입니다. 위 식을 최소화하면 결국 스코어는 해당 bin 에서의 positive-class 의 비율이 됩니다. 즉, histogram binning 방법은 예측값을 binning 한 후, 각 bin 에서의 positive-class 의 비율로 확률을 재할당하는 것으로 이해할 수 있습니다. 


2) Platt scaling: Platt scaling 은 1999년 Platt 이 제시한 방법으로 SVM 의 출력을 '확률화' 하기 위한 방법으로 제시되었습니다. Platt scaling 은 histogram binning 과는 다르게 parametric 방법입니다. 최초로 제시된 이 방법에서는 모형의 출력을 logistic regression 의 input 으로 넣습니다. 뉴럴넷의 경우, 최종 모델의 출력값이 sigmoid 되기 전의 값 z 를 아래와 같이 변환합니다. 


$$ q_i = \sigma(az_i + b) $$


이 때, a, b 는 validation set 에 대해서 NLL (=binary cross entropy) 을 최소화 시키는 방향으로 학습이 됩니다. 당연하지만 이 과정에서 학습된 뉴럴넷의 weight는 영향을 받지 않습니다. 



3) Temperature scaling: Temperature scaling 은 Platt scaling 에 기초한 방법입니다. K 개의 label 이 있는 다중 분류 문제에서 Temperature scaling 방법에서는 단일 scalar parameter T 를 이용해 logit vector z 를 아래와 같이 변환합니다. 



본 논문의 저자는 T 를 temperature 라고 부릅니다. T 는 soft max function 을 "soften" 시키는 일을 합니다. T 가 커질 수록 최종 calibrated probability q 는 1/K 로 수렴합니다 (이것은 uncertainty가 극대화 된다는 의미입니다). 식을 보면 T 가 1일 때가 원래 softmax를 이용하여 confidence 를 구하는 방법이라는 것을 알 수 있습니다. T는 validation set 에 대해 NLL 을 최소화 하는 식으로 optimization 하는 방법입니다. T 의 장점은 argmax 를 바꾸지는 않는다는 것입니다. 즉, T 는 모델의 정확도에는 영향을 주지 않고, Calibration 에만 영향을 줍니다. 


참고

https://arxiv.org/pdf/1706.04599.pdf

https://machinelearningmastery.com/calibrated-classification-model-in-scikit-learn/

반응형
반응형

변수 종류별 시각화 및 검정 방법


얼마전, 변수 종류별로 사용할 수 있는 시각화 및 검정 방법을 간단하게 요약한 표를 발견해 공유합니다. 출처는 이곳 입니다. 표를 그린 기본 아이디어를 보면, 종속변수를 Binary, Nominal, Ordinal, Interval, Normal, Censored Interval 으로 나누었습니다. 독립변수의 경우, Binary Categorical (Paired/Unpaired), Categorical (Paired/Unpared), Normal, Multivariate 으로 나누었습니다. 이 때, ordinal 의 경우, 연속형 범주로 또는 범주형 변수 상황에 따라 둘 다 가능합니다.


그래프의 경우 요약하면, Barplot, Boxplot, Scatter plot 이 기본입니다. 카테고리x카테고리 = Barplot, 카테고리x연속형 = Box plot, 연속형x연속형 = Scatter plot 으로 기본적으로 그리면 됩니다. 여기서 Box plot 의 경우 전통적인 통계에서 많이 쓰이는 그래프이지만, Histogram with different colors or side by side 또는 violin plot 도 선호됩니다. 


대부분의 기초 통계에서 배우는 검정은 대부분 이 표안에 속해있습니다. 검정에서 하고자 하는 것은 변수 X와 변수 Y 가 연관성이 있는가? 입니다. 검정도 마찬가지로, X와 Y의 종류에 따라 다양하게 존재합니다. 아래표의 대부분의 검정은 기초 통계에서 배우는 내용입니다. Paired data 에 적용하는 맥니마 검정은 설문지/심리학 연구 등에 자주 사용되는 통계적 검정 방법인데 이전 제 포스팅에서 다루었습니다. 코크란의 Q test는 맥니마 검정의 확장으로 종속변수가 두 개 이상일 때 사용하는 통계적 검정 방법입니다. 


출처

https://www.r-bloggers.com/overview-of-statistical-tests/

반응형
반응형

예측값을 변수로 활용하는 앙상블 테크닉 Blending


Blending 은 Ensemble 의 한 종류입니다. Ensemble 이란 예측 모형을 통합해서 하나의 예측을 수행하는 것을 말합니다. Ensemble 의 묘미는 서로 다른 예측 모형들을 합쳐 더 강한 예측 모형을 만들 수 있다는 것입니다다. 가령 정확도 0.7, 0.7 인 모델 두 개를 합쳐서 0.9 을 만들 수 있습니다. 본 포스팅에서는 Ensemble 의 한 가지 종류인 Blending 에 대해 설명해보려고 합니다. 



Blending 의 프로세스  


1. Traning/Validation/Test set 을 나눈다. 

2. Training set 에 모델 피팅을 한다. 

3. Validation/Test set 에 대해 예측을 한다. 

4. Validation set 과 Validation set 에 대한 예측이 새로운 모델을 만드는 데에 사용된다.

5. 4의 모델을 최종 Test set 에 대한 예측을 하는데 사용된다. 


조금 더 명확하게 보기 위해 Blending 을 활용한 코드를 보면서 설명을 하겠습니다. 아래 코드는 Decision tree 와 KNN 을 활용해 각각 validation set 과 test set 에 대한 예측을 수행하는 코드입니다. 


Blending 구현 - 파이썬 

참고 (https://www.analyticsvidhya.com/blog/2018/06/comprehensive-guide-for-ensemble-models/)

model1 = tree.DecisionTreeClassifier()
model1.fit(x_train, y_train)
val_pred1=model1.predict(x_val)
test_pred1=model1.predict(x_test)
val_pred1=pd.DataFrame(val_pred1)
test_pred1=pd.DataFrame(test_pred1)

model2 = KNeighborsClassifier()
model2.fit(x_train,y_train)
val_pred2=model2.predict(x_val)
test_pred2=model2.predict(x_test)
val_pred2=pd.DataFrame(val_pred2)
test_pred2=pd.DataFrame(test_pred2)


아래 코드는 validation set 의 예측 결과 (Decision tree, KNN) 을 원래 feature 에 붙여서 새로운 데이터셋 df_val 을 만든 후, Final prediction model (이 예제에서는 Logistic regression model) 을 적합시키고, test set 에 대한 예측을 수행하는 것입니다. 

df_val=pd.concat([x_val, val_pred1,val_pred2],axis=1)
df_test=pd.concat([x_test, test_pred1,test_pred2],axis=1)

model = LogisticRegression()
model.fit(df_val,y_val)
model.score(df_test,y_test)


Blending 과 Stacking 의 차이점


Blending 은 종종 다른 Ensemble technique 인 Stacking 과 비교가 됩니다. Stacking 은 다른 예측 모형들의 결과값을 통해 새로운 모델을 만드는 Ensemble 방법입니다. Stacking 의 경우는 Training set 의 예측값을 Training data 로 하여 Meta classifier (또는 Meta regression) 을 학습합니다. 그리고 이 Meta classifier 를 통해 Test set 을 예측합니다. Blending 과 Stacking 의 차이점은 1) Blending 은 validation set 에 대한 예측값을 training 에 이용하지만, Stacking 은 training set 에 대한 예측값을 활용합니다. 2) Blending 을 예측값 뿐 아니라 원래 Feature 도 활용하는 반면, Stacking 은 예측값만 활용합니다. 그러면 이러한 의문이 남습니다. 왜 validation set 만 활용해서 Final prediction model 을 구축해야하는가? Training Set 에의 feature에 Training set 으로부터 예측한 예측값을 붙여서 활용하면 되지 않는가? 입니다. 만약 training performance 와 validation performance 가 비슷하다면 가능한 방법입니다. 하지만 training performance 가 높다면, feature 가 예측에 별로 필요하지 않게 됩니다. 따라서 feature를 예측에 활용하는 blending 의 장점이 없게 됩니다. 따라서 blending 을 잘활용하기 위해서는 validation set 의 meta-feature (원래 feature 및 예측값) 을 통해 training 하고, test set 에 대해 성능을 최종 평가해야합니다. 


참고

https://www.analyticsvidhya.com/blog/2018/06/comprehensive-guide-for-ensemble-models/

https://machinelearningmastery.com/implementing-stacking-scratch-python/

반응형
반응형

통계적 검정의 종류


통계적 검정에 있어 p-value 를 보고 기각 여부를 판단하는 방법도 있지만, 소위 '신뢰구간이 0 을 포함하는지' 를 보고 가설검정을 할 수도 있다. 왜 신뢰구간이 0을 포함하지 않으면 두 그룹의 차이가 유의하다고 볼 수 있을까? 본 포스팅에서는 우월성 검정과 동등성 검정에 대하여 신뢰구간과 양측 가설검정이 어떤 관계를 갖고 있는지 설명한다. 


1. 우월성 검정 (Superiority Test)


우월성 검정은 A가 B보다 우월함을 보이는 검정으로 일반적인 통계적 검정 (two-sample t-test) 이다. two-sample t-test 에 대한 기초내용은 이전 포스트에서 정리하였다. 


$$ H_0 : \mu_1 = \mu_2 $$

$$ H_0 : \mu_1 \ne \mu_2 $$


우월성 검정을 단측검정이 아니라 양측검정으로 하는 이유는 신뢰구간과 검정의 결과를 동일하게 맞추기 위해서이다. 예를 들어, A 약이 B 약보다 우월함을 보이고 싶을 때 검정을 통해서 구한 p-value 만 제시하는 것보다 구간 추정값을 제시하는 것이 더욱 많은 정보를 제공한다. 따라서 양측검정을 하면, 구간 추정을 통한 검정과 같은 판단을 내릴 수 있기 때문에 양측검정이 더 선호된다. 일반적으로 우월성 검정의 결과로 양측검정에 대한 p-value 와 함께 95 % 신뢰 구간을 제시된다. 


양측검정과 95 % 신뢰구간이 0을 포함하는지 여부가 같은 판단을 내리는 이유 


양측검정의 p-value


합동 분산을 이용한 two-sample t-test 를 예로 들어보자. p-value는 귀무가설하에서 더 극단적인 데이터를 관찰할 확률이다. 여기서 극단적인 확률이란 표본의 통계량이 대립가설을 지지하는 쪽으로 나오는 것을 말한다. 따라서 부등호의 방향이 [X > 통계량] 임을 알 수 있다. (단 통계량이 양수인 경우)


$$ P= 2 P[X > \frac{\tilde X_1 - \tilde X_2 - (\mu_1-\mu_2)}{\sqrt{s^2_p(1/n_1+1/n_2)}}] $$

$$ X \sim t(n_1+n_2-2) $$


위 식에서 p-value는 귀무가설 하에서라는 정보를 이용하면 mu_1 - mu_2 = 0 이고, 이를 통해 p-value 를 계산할 수 있다.  


95% 신뢰구간


$$ (\tilde X_1 - \tilde X_2 - t_{0.025}\sqrt{s^2_p(1/n_1+1/n_2)} ,  \tilde X_1-\tilde X_2 + t_{0.025}\sqrt{s^2_p(1/n_1+1/n_2)})$$


이 때, 통계량의 차이가 양수이고, 0을 포함하지 않는 경우는 구간 추정값의 left bound 가 0 보다 큰 경우인데, p-value 는 0.05 보다 작음을 알 수 있다. 통계량의 차이가 음수인 경우도 마찬가지로 right bound 가 0보다 작을 때의 p-value 가 0.05 보다 작기 때문에 동일하다. 이를 식으로 설명하면 아래와 같다. 


$$ If, \tilde X_1 - \tilde X_2 - t_{0.025}\sqrt{s^2_p(1/n_1+1/n_2)} > 0 $$

$$ P < 2P[X > t_{0.025}] = 0.05$$ 


2. 동등성 검정 (equivalence test) 


동등성검정은 A와 B가 의미있는 차이가 없음을 보이는 목표를 갖는 검정이다. 동등성 검정에서는 delta 라는 미리 정의된 값을 이용한다. 


$$ H_0 : \mu_1-\mu_2 \ge \delta $$

$$ H_1 : \mu_1-\mu_2 < \delta $$


동등성 검정 결과는 95 % 신뢰구간이 (-delta, delta) 안에 들어오는지 여부와 같다. 신뢰구간이 delta 사이에 들어오면 양측검정의 귀무가설을 기각할 수 있다. 왜 이렇게 되는지 아래에서 설명한다. 


양측검정의 p-value


우월성검정과 비교해 부등호의 방향을 주의해야 한다.


$$ P= 2 P[X < \frac{\tilde X_1 - \tilde X_2 - (\delta)}{\sqrt{s^2_p(1/n_1+1/n_2)}}]  $$

$$ X \sim t(n_1+n_2-2) $$


95 % 신뢰구간


95 % 신뢰구간은 검정과 독립적으로 나오는 값이기 때문에 1. 과 같다. 


$$ (\tilde X_1 - \tilde X_2 - t_{0.025}\sqrt{s^2_p(1/n_1+1/n_2)} ,  \tilde X_1-\tilde X_2 + t_{0.025}\sqrt{s^2_p(1/n_1+1/n_2)})$$


만약, 위 신뢰구간의 right bound 가 delta 보다 작다면, left bound 도 자연스레 -delta 보다 클 것이다. (신뢰구간은 대칭적이기 때문에) 따라서 아래식을 가정했을 때, p-value가 0.05 보다 작음을 보이면 된다.


$$ If, \tilde X_1 - \tilde X_2 + t_{0.025}\sqrt{s^2_p(1/n_1+1/n_2)} < \delta $$

$$ P < 2P[X < -t_{0.025}] = 2P[X > t_{0.025}] = 0.05 $$


따라서 동등성 검정도 따로 통계량을 구하지 않고도, 신뢰구간을 통해 바로 검정할 수 있다는 것을 알 수 있다. 

반응형
반응형

모분산의 추정과 검정

 

어떤 공장에서 일정 크기의 볼트를 만든다고 해보자. 제조 공정에서 볼트의 지름이 일정해야 품질 기준을 만족할 수 있다. 볼트의 지름이 10mm 여야하는데, 평균적으로는 10mm 이지만, 분산이 존재해  불량품이 일정 부분 존재한다. 이런 상황에서 볼트 지름의 분산을 확인하는 방법으로 모분산에 대한 추론을 할 수 있다. 

 

모분산의 추정에는 카이제곱 분포를 이용한다. 카이제곱분포는 표준정규분포에서 n개의 샘플을 뽑아서 그것들의 제곱을 모두 합한 것을 하나의 확률 변수 Q 로 정의하자. 카이제곱분포는 Q 가 따르는 분포이다. 카이제곱 분포는 하나의 모수 n 을 갖고, 이를 자유도라 한다.

 

$$ Q = \sum^{n}_{i=1} Z_i $$

$$ Q \sim \chi (n) $$

 

이 때,  아래와 같은 확률 변수를 정의하자. 

 

$$ X \sim N(\mu, \sigma^2) $$

 

모분산은 아래 통계량이 자유도가 n-1 인 통계량을 따른다는 것으로부터 추정된다. 

 

$$ \frac{(n-1)s^2}{\sigma^2} \sim \chi(n-1) $$

 

증명은 아래와 같다. 

 

$$ \sum^{n}_{i=1} \frac{(X_i - \mu)^2}{\sigma^2} = \frac{(n-1)s^2}{\sigma^2} + \frac{(\tilde X-\mu)^2}{\sigma^2/n} $$

$$ \sum^{n}_{i=1} \frac{(X_i - \mu)^2}{\sigma^2} \sim \chi(n) $$

$$ \frac{(\tilde X-\mu)^2}{\sigma^2/n} \sim \chi(1) $$

 

따라서 chi-square 분포의 additivity 에 의해 아래와 같다. 

 

$$ \frac{(n-1)s^2}{\sigma^2} \sim \chi(n-1) $$ 

 

한 가지 유의할점은 모집단 X 가 정규분포를 따라야 이러한 분포가 타당하다는 것이다. 

 

예제 

 

1) 공장에서 볼트의 분산이 1mm 보다 작아야 현재 생산 공정을 유지하기로 했다. n=100 개의 샘플을 고른 후, 표본 분산을 추정했을 때, 1.2mm 가 나왔다면, 모분산이 1mm 보다 크다고 볼 수 있는지 유의수준 0.05 하에서 검정하라  

 

검정 통계량은 아래와 같이 계산된다.

 

$$ \frac{(99)1.2}{1} = 118.8 $$

$$ Q \sim \chi(99) $$

$$ P (Q > 111.8) = 0.085 $$

 

p-value 가 0.085로 0.05 보다 크므로 모분산이 1mm 보다 크다고 할 수 없다. 

 

2) 모분산의 95% 신뢰구간을 구하라

 

모분산의 신뢰구간은 아래와 같은 식으로 구할 수 있다. 아래 신뢰구간은 통계량이 카이제곱 분포를 따른다는 사실을 통해 쉽게 확인할 수 있다. 

 

$$ [\frac{(n-1)s^2}{\chi_{0.025}(n-1)}, \frac{(n-1)s^2}{\chi_{0.975}(n-1)}] $$

 

이 때, n=100, s^2 = 1.2, chi_0.975 = 73.36, chi_0.025 = 128.422 를 대입하면 신뢰구간은 아래와 같다.

 

[0.92, 1.61] 

 

이 신뢰구간은 양측 검정을 할 때에도 활용할 수 있다. 

 

참고

http://www.uniwise.co.kr/pdfupload/lecture_upload/R201500241/stlsm_30.pdf

반응형
반응형


두 모집단의 모비율의 차이에 대한 검정


앞선 포스트에서 중심극한정리에 의한 정규 근사를 통해 표본 비율의 분포를 구하고 검정하는 방법을 다루었다. 이번에는 두 모집단에 대해서 비율에 차이가 있는지를 검정하는 방법에 대해서 정리해보려고 한다. 앞선 one sample 비율 검정과 다른점은 one sample 검정에서는 가설검정을 할 때, 귀무가설 하에서의 모비율을 검정 통계량 계산에 활용할 수 있었던 반면, two sample 비율 검정에서는 귀무가설이 두 모비율이 같다고 정의되는 경우가 일반적이기 때문에 모비율이 정의되지 않아 모비율을 다른 방법을 통해 추정해야 한다는 것이다. 


모델 


각각 n_1, n_2 명 존재하는 집단 A, B 에서 어떤 법안에 찬성하는지 여부를 투표를 통해 결정하는 상황을 예로 들어보자. 집단 A, B 에서 사람의 찬성 여부를 각각 확률변수 X, Y 라 할 때 다음과 같이 모델링할 수 있다. 


$$ X \sim Be(p_1) $$

$$ Y \sim Be(p_2) $$ 

 

표본 비율은 아래와 같이 정의된다. 


$$ \tilde p_1 = \frac{\sum^{n_1}_{i=1} X_i}{n_1} $$

$$ \tilde p_2 = \frac{\sum^{n_2}_{i=1} Y_i}{n_2}$$


표본비율은 베르누이 분포의 표본 평균이라고 볼 수 있기 때문에 중심극한 정리에 의해 표본비율은 아래 분포로 근사된다. 


$$ \tilde p_1 \sim N(p_1, p_1(1-p_1)/n_1) $$

$$ \tilde p_2 \sim N(p_2, p_2(1-p_2)/n_2) $$


가설 검정


$$ H_0 : p_1 = p_2 $$

$$ H_1 : p_1 \ne p_2 $$


검정 통계량 


아래 분포를 통해 검정한다. 

$$ \tilde p_1 - \tilde p_2 \sim N(p_1 - p_2, p_1(1-p_1)/n_1 + p_2(1-p_2)/n_2)  $$


검정 통계량은 다음과 같다. 

$$ \frac{(\tilde p_2 - \tilde p_2) - (p_1-p_2)}{\sqrt{p_1(1-p_1)/n_1 + p_2(1-p_2)/n_2}} $$


이 때, p_1-p_2 는 귀무가설 하에서 0이 되는데, 분모의 p_1, p_2는 사라지지 않는다. 이 모비율을 추정하는 방법에 따라 검정통계량은 아래 2가지 정도로 계산해볼 수 있다. 


1. 표본비율을 통해 모비율을 추정 


$$ \frac{(\tilde p_1 - \tilde p_2)}{\sqrt{\tilde p_1(1-\tilde p_1)/n_1 + \tilde p_2(1-\tilde p_2)/n_2}} $$


2. 합동 비율을 추정 


$$ \tilde p = \frac{\sum^{n_1}_{i=1} X_i+ \sum^{n_2}_{i=1} Y_i}{n_1+n_2} $$

$$ \frac{(\tilde p_1 - \tilde p_2)}{\sqrt{\tilde p(1-\tilde p)/n_1 + \tilde p(1-\tilde p)/n_2}} = \frac{(\tilde p_1 - \tilde p_2)}{\sqrt{(1/n_1+1/n_2)\tilde p(1-\tilde p)}} $$


예제


문제: 실험 참여자 (암 환자) 에 대해 대조약 (기존약) 과 시험약을 투약하고, 12개월 간 관찰아혀 사망한 환자의 수를 관찰한다. 이 때, 처리집단이 대조집단에 비해 더 사망자가 적다는 것을 비율의 차이를 검정하는 방법을 통해 확인해보자.  


 

 표본 크기 

사망자 환자 수 

 대조집단

 300  

50 

 처리집단

 200 

20  


$$ n_1 = 300, \tilde p_1 = 1/6 $$

$$ n_2 = 200, \tilde p_2 = 1/10 $$


검정 통계량은 아래와 같다. 


$$ \frac{(\tilde p_1 - \tilde p_2)}{\sqrt{\tilde p_1(1-\tilde p_1)/n_1 + \tilde p_2(1-\tilde p_2)/n_2}} $$

$$ \frac{(1/6 - 1/10)}{\sqrt{1/6(1-1/6)/300 + 1/10(1-1/10)/200}} =  0.0666/0.0302 = 2.205 $$

$$ P(Z > 2.205) = 0.013 $$ 


양측검정을 하기위해 곱하기 2를 해주면 p-value 가 0.026 으로 0.05 보다 작으므로 두 모비율은 다르다고 결론 내릴 수 있다. 마지막으로 R 의 stat 패키지를 통해 구한 p-value 가 손으로 구한 값과 같은지를 확인해보자.


prop.test(n=c(300,200), x=c(50,20), correct=F)


correct option 은 R 의 기본옵션인 연속성 보정을 사용하지 않는다는 것을 의미한다. 


> prop.test(n=c(300,200), x=c(50,20), correct=F)


        2-sample test for equality of proportions without continuity

        correction


data:  c(50, 20) out of c(300, 200)

X-squared = 4.4297, df = 1, p-value = 0.03532

alternative hypothesis: two.sided

95 percent confidence interval:

 0.007445812 0.125887521

sample estimates:

   prop 1    prop 2

0.1666667 0.1000000


이 때, X-squared 값에 root 를 씌우면 Z-score 를 계산할 수 있다. Z-score는 4.4297에 sqrt를 하면, 2.104685 이다. 1. 표본비율을 통해 모비율을 추정 하는 방법을 통해 구한 Z-score 와 다르다는 것을 알 수 있다. 2. 합동 비율을 추정 방법을 통해 Z-score 를 구하면, Z-score 가 2.10468 로 R 의 결과와 같다는 것을 확인할 수 있다. 


(1/6-1/10)/sqrt((1/300+1/200)*0.14*0.86) = 2.10468


R 에서는 합동 비율을 추정하는 방법을 통해 비율의 차이를 검정한다는 것을 확인할 수 있다. 

반응형
반응형