가설검정

  • 통계적 가설검정(statistical hypothesis test): 통계적 추측의 하나로서, 모집단 실제의 값이 얼마가 된다는 주장과 관련해, 표본의 정보를 사용해서 가설의 합당성 여부를 판정하는 과정
  • 통계적 가설검정은 연구자가 우현이 일어난 일에 속지 않도록 보호하기 위한 방법을 개발되었다.
    • 사람은 임의성을 과소평가하는 경향이 있음
    • 무작위 사건을 어떤 중요한 의미가 있는 패턴을 갖는 것으로 오해하는 경향이 있음
  • A/B 검정을 계획할 때, 일반적으로 가설을 염두에 두고 진행
  • 적절하게 설정된 A/B 검정은 A와 B 사이에서 관찰된 차이를 다음 원인으로 설명 가능
    • 우연한 대상 선정
    • A와 B의 진정한 차이
  • 통계적 가설검정은 A그룹과 B그룹 사이에서 관찰되는 차이가 우연에 의해 발생한 것인지 평가하기 위해 A/B 검정 등의 무작위 실험을 포함하는 분석임


용어 정리

  • 귀무가설 또는 영가설(null hypothesis): 우연 때문이라는가설
  • 대립가설(alternative hypothesis): 증명하고자 하는 가설로 귀무가설과 대조되는 가설
  • 일원검정(one-way test): 한 방향으로만 우연히 일어날 확률을 계산하는 가설검정
  • 이원검정(two-way test); 양 방향으로 우연히 일어날 확률을 계산하는 가설검정


가설검정의 절차

  • 가설검정은 다음과 같이 총 5단계 절차를 거친다.
    1. 유의수준의 결정, 귀무가설 대립가설 설정

    2. 검정통계량의 설정

    3. 기각역의 설정

    4. 검정통계량 계산

    5. 통계적인 의사결정


귀무가설

  • 가설검정의 논리
    • 사람은 실제로 우연히 일어난 일이지만, 흔하지 않다는 것에 주목하여 그것이 뭔가 의미가 있고 우연이 아닐 것이다라고 추정하는 경향을 가짐
    • 따라서 실험에서 얻은 그룹 간의 차이가 임의성을 통해 얻을 수 있는 합리적인 수준과는 더 극단적으로 달라야 한다는 증거를 제시할 수 있어야 함
  • 가설검정의 기본 가정 = 귀무가설
    • 그룹들이 보여주는 결과는 서로 같으며, 그룹 간의 차이는 우연에 의한 결과이다.
  • 귀무가설이 틀렸다는 것을 입증하여, A그룹과 B그룹 간의 차이가 우연에 의한 것이 아니라는 것을 보여주는 귀류법을 사용한다.

대립가설

  • 가설검정은 귀무가설과 대립가설을 사용하며, 대립가설의 예로는 다음과 같다
    • 귀무가설: A그룹과 B그룹의 평균에는 차이가 없다.
    • 대립가설: A그룹과 B그룹은 다르다. 즉, 한쪽의 평균이 크거나 작다
  • 귀무가설과 대립가설은 모든 가능성을 설명할 수 있어야 한다.

일원/이원 가설검정

  • A/B 검정을 통해 기존에 기본으로 사용하던 A와 비교하여 새로운 B가 어떠한지 검증한다고 생각해보자.
    • 가정: 이 경우 B가 월등히 좋다는 것으로 입증되지 않는 이상 A를 계속 사용한다.
    • 이런 상황에서 우연에 의해 B가 좋은 것으로 선택되지 않도록 가설검정을 해야한다.
    • B가 좋다는 것을 확실하게 입증하지 못하면 A를 계속 하용하면 되기 때문에 우연에 의해 속을 일은 없게 된다.
    • 이런 경우 방향성을 생각한 대립가설이 필요하다.
    • 귀무가설: A가 B보다 좋다.
    • 대립가설: B가 A보다 좋다.


  • 어느 쪽으로도 속지 않도록 가설검정을 하려면 대립가설은 양방향이 되어야 한다.
    • 대립가설: A는 B와 다르며, 더 좋거나 나쁠 수 있다.


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

기술 통계량(Descriptive Statistics)  (0) 2020.06.16
재표본 추출  (0) 2019.11.25
A/B 검정  (0) 2019.11.22
1. Data Science in a Big Data World  (0) 2018.04.06

A/B TEST

  • 검정(test): 일정한 규정에 따라 자격이나 조건을 검사하여 결정
  • A/B 검정: 두 종류의 처리 방법이나 제품 또는 절차 중 어느 한쪽이 다른 한쪽보다 더 낫다는 것을 입증하기 위하여 실험대상을 A와 B 두 개의 그룹으로 나누어 진행하는 실험


A/B 검정의 예

  • 종자 발아가 어디에서 더 잘되는지 알아보기 위해 두 가지 토양 처리를 검정한다.
  • 암을 더 효과적으로 억제하는 두 가지 치료법을 검정한다.
  • 두 가지 가격을 검정하여 더 많은 순이익을 산출하는 쪽을 결정한다.
  • 두 개의 인터넷 뉴스 제목을 검정하여 더 많은 클릭을 유도하는 쪽을 결정한다.
  • 두 개의 인터넷 광고를 검정하여 어느 것이 더 높은 전환율을 얻는지 판단한다.

용어 정리

  • 대상(subject) 또는 피실험자(): 처리를 적용할 개체
  • 처리(treatment): 어떤 대상에 가하는 특별한 환경이나 조건
  • 처리군 또는 처리그룹(treatment group): 특정 처리에 노출된 대상의 집합
  • 대조군 또는 대조그룹(control group): 어떤 처리도 하지 않은 대상의 집합
  • 검정통계량(test statistics): 처리 효과를 측정하기 위한 지표
  • 눈가림 검정(blind test): 특정 처리에 대한 인식이 검정에 영향을 줄 수 있으므로 대상자가 받고 있는 처리가 A인지 B인지 알지 못하도록 하는 검정 방법


  • 제대로 된 A/B 검정에는 둘 중 어느 한쪽 처리를 가할 대상이 주어진다.
  • 검정의 핵심은 대상을 어떤 특정 처리에 노출시켜야 하는데, 대상을 무작위로 어느 한쪽 처리에 노출시키는 것이다.
  • 처리에 노출된 결과의 차이는 다음과 같은 이유로 발생한다고 생각할 수 있다.
    • 각각 다른 처리의 효과
    • 어떤 대상이 어떤 처리에 노출되는지에 관한 경우의 수
      • 무작위로 노출시킨 결과, 자연스럽게 더 좋은 결과를 보이는 대상이 A나 B 한쪽에 집중된다
  • A그룹과 B그룹을 비교하는 데 사용하는 검정통계량 또는 측정지표에 주의해야 한다.


대조그룹의 필요성

  • 대조그룹이 없다면
    • 처리그룹 이외의 대상이 모두 같다는 보장을 할 수 없으며
    • 어떤 차이가 나더라도 처리(또는 우연)로 인한 결과인지 확신할 수 없다
  • 처리를 하지 않은 대조그룹은 처리그룹과 동일한 조건을 적용한다.
    • 단순히 '기준선'이나 이전 경험과 비교할 경우, 처리 이외의 다른 요소가 개입할 가능성이 있기 때문이다.
  • 웹 환경에서의 A/B 검정 시 처리 조건의 예
    • 웹 페이지의 디자인
    • 제품의 가격
    • 헤드라인의 어감 등
  • 무작위 원칙을 고수하기 위하여 여러 행동 유형과 관련된 지표를 수집할 수 있지만, 실험이 결국 A처리와 B처리 간의 결정으로 이어지는 경우에 단일 지표나 검정통계량을 사전에 정해놓아야 하며, 그렇지 않고 실험 후 검정통계량을 사용하게 되면 연구자 편향에 의해 제대로된 결과를 얻지못할 수 있다.


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

기술 통계량(Descriptive Statistics)  (0) 2020.06.16
재표본 추출  (0) 2019.11.25
가설검정  (0) 2019.11.22
1. Data Science in a Big Data World  (0) 2018.04.06
불러온 Plotly를 아래와 코드로 시험합니다.

'Regression Analysis' 카테고리의 다른 글

선형모델 기초  (0) 2019.10.01

용어정리

  • 응답변수(response variable) 또는 목표변수(target variable): 예측 결과로 소문자 \(y\)를 표기
  • 예측변수(predictor variable) 또는 속성(attribute), 특성(feature): 전제 조건으로 하나일 경우에는 \(x\)로, 많은 경우에는 \(\mathbf{X}\)로 표기
    • \(\mathbf{X}\)를 사용하면 행렬 표기법으로 표현 가능
    • \(\mathbf{y}\)는 응답벡터(열벡터)가 됨

선형모델

  • 행렬 기호 표기법을 사용해 \(\mathbf{X}\)를 오차 없이 또는 허용 가능한 오차 범위의 \(\mathbf{y}\)로 변환할 수 있는 함수를 다음과 같이 정의 가능
\begin{eqnarray} \mathbf{y} = h(\mathbf{X})\tag{1}\end{eqnarray}
  • 함수를 정의하고 특정 매개변수를 가진 특정 알고리즘과 특정 데이터로 이루어진 \(\mathbf{X}\) 행렬을 사용한다면, 식 \((1)\)을 가설(hypothesis)라고 할 수 있다.
  • 목표변수 \(\mathbf{y}\)를 예측하는 데 있어 어느 정도 잘 작동하는지 테스트할 수 있는 준비된 가설이라 볼 수 있다.

예측변수

  • 예측변수를 저장하기 위해 일반적으로 다음과 같이 \(m\)개의 사례(또는 관찰) 데이터를 가진 행렬 \(\mathbf{X}\)를 다음과 같이 표기한다.
\begin{eqnarray} \mathbf{X} = \left[ \begin{array}{c} x_1\\ x_2 \\ \vdots \\ x_m \end{array}\right]\end{eqnarray}
  • 실제 통용되는 데이터는 더 복잡한 행렬로 표현할 수 있으므로 다음과 같이 표기한다.

\begin{eqnarray} \mathbf{X} = \left[ \begin{array}{cccc} x_{1,1} & x_{1,2} & \ldots & x_{1,n} \\ x_{2,1} & x_{2,2} & \ldots & x_{2,n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{m,1} & x_{m,2} & \ldots & x_{m,n} \\  \end{array}\right]\end{eqnarray}


예측변수와 응답변수의 관계

  • 과거의 관찰로부터 얻은 정보는  \(\mathbf{X}\)와 \(\mathbf{y}\) 사이의 관계를 설정하는 데 중요한 역할을 한다.
  • 실제로는 \(\mathbf{X}\)와 \(\mathbf{y}\) 사이에 가능한 연관성을 모두 알 수가 없다.
    • 특정 \(\mathbf{X}\)에 대해서만 관찰했기 때문에 주어진 \(\mathbf{X}\)에 대한 \(\mathbf{y}\)의 경험은 표본 편향(sampling bias)이다..
    • 과거에 전혀 발생하지 않았기 때문에 어떤 특정한 \((\mathbf{X}, \mathbf{y})\)의 연관성을 발견할 수 없다. 그러나 향후 연관성을 발견할 가능성이 있다.
  • 지도 알고리즘(supervised algorithm): 배치(batch)라고 하는 대규모 과거 데이터 표본을 가지고 학습
  • 능동학습(active learning): 대량의 데이터를 무시하고 스스로 학습하기에 가장 유용한 표본을 선택하여 학습
  • 온라인학습(online learninig): 환경이 급변하는 경우에는 예측변수와 응답변수 간의 새로운 관계를 지속적으로 파악하면서 데이터를 사용 가능한 상태로 스트리밍해 학습


'Regression Analysis' 카테고리의 다른 글

보스턴 주택가격 예측  (0) 2019.10.01

일반화가법모델

  • 사전 지식이나 회귀 진단을 통해 응답변수와 예측변수 사이에 비선형 관계가 있다는 것을 알았다고 하자.
  • 다항 항은 관계를 포착하기에 유연성이 부족할 수 있으며 스플라인 항은 매듭을 어디로 할지 정해줘야 한다.
  • 일반화가법모델(GAM, Generalized Additive Model): 스플라인 회귀를 자동으로 찾는 기술
  • R의 gam 패키지로 주택 데이터에 GAM 모델을 적합하는 방법
    • s(SqFtTotliving) 옵션: 스플라인 항에 대한 ‘최적’ 매듭 점을 찾도록 gam 힘수에 전달
> lm_gam <- gam(AdjSalePrice ~ s(SqFtTotLiving) + SqFtLot + Bathrooms +  Bedrooms + BldgGrade, data=house_98105)
> terms <- predict.gam(lm_gam, type='terms')
> partial_resid <- resid(lm_gam) + terms
> df <- data.frame(SqFtTotLiving = house_98105[, 'SqFtTotLiving'], Terms = terms[, 5], PartialResid = partial_resid[, 5])
> ggplot(df, aes(SqFtTotLiving, PartialResid)) + geom_point(shape=1) + scale_shape(solid = FALSE) + geom_smooth(linetype=2) + geom_line(aes(SqFtTotLiving, Terms)) + theme_bw()
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

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

스플라인  (0) 2019.10.01
다항회귀  (0) 2019.09.30
회귀 진단: 가설 검정  (0) 2019.09.27
회귀식 해석  (0) 2019.09.27
회귀에서의 요인변수  (0) 2019.09.27

스플라인

  • 다항회귀는 비선형 관계에 대해 어느 정도의 곡률을 담아낼 수 있다.
  • 하지만 3차, 4차 다항식과 같이 고차항을 추가하는 것은 종종 회귀방정식에 바람직하지 않은 ‘물결모양’의 그래프를 만들어낸다.
  • 비선형 관계를 모델링하는 또 다른 더 나은 방법은 스플라인을 사용하는 것이다.
  • 스플라인(spline): 고정된 점들 사이를 부드럽게 보간하는 방법
    • 스플라인은 원래 선박이나항공기를 건조할 때, 부드러운 곡선을 그리기 위해 사용
    • ‘덕(duck)’이라는 추를 사용하여 앓은 나무 조각을 구부려서 스플라언을 만들곤 했다

spline duck에 대한 이미지 검색결과

그림 출처: http://forum.woodenboat.com/showthread.php?146441-A-Duck-Trap-Wherry-in-Utah


  • 스플라인의 기술적인 정의: 일련의 조각별 연속 다항식
    • 루마니아 출신 수학자 이자크 야코프 쉰베르크(Isaac Jacob Schoenberg)가 2차 세계 대전 중 미국의 애버딘 전차
      주행 시험장에서 처음 개발
    • 구간별 다항식은 예측변수를 위한 일련의 고정된 점 (매듭(knot)) 사이를 부드럽게 연결
  • 스플라인을 구하는 것은 다항회귀보다 훨씬 복잡
  • R 패키지 splines는 회귀모형에서 b-스플라인 항을 만드는 데 사용할 수 있는 bs 힘수를 포함
    • b-스플라인 항을 주택 회귀모형에 추가히는 방법
    • 다항식의 차수와 매듭의 위치, 이 두 가지 파라미터를 설정해야 함
    • 예측변수 SqFtTotLiving은 3차 스플라인 (degree = 3)을 사용
    • bs의 기본 설정은 매듭을 경계에 배치하는데, 매듭을 하위 사분위 (. 25), 중간 사분위 (.5), 상위 사분위 (.75) 에 배치
> library(splines)
> knots <- quantile(house_98105$SqFtTotLiving, p=c(.25, .5, .75))
> lm_spline <- lm(AdjSalePrice ~ bs(SqFtTotLiving, knots=knots, degree=3) + SqFtLot + Bathrooms + Bedrooms + BldgGrade,  data=house_98105)
> terms1 <- predict(lm_spline, type='terms')
> partial_resid1 <- resid(lm_spline) + terms
> df1 <- data.frame(SqFtTotLiving = house_98105[, 'SqFtTotLiving'], Terms = terms1[, 1], PartialResid = partial_resid1[, 1])
> ggplot(df1, aes(SqFtTotLiving, PartialResid)) + geom_point(shape=1) + scale_shape(solid = FALSE) + geom_smooth(linetype=2) + geom_line(aes(SqFtTotLiving, Terms)) + theme_bw()
`geom_smooth()` using method = 'loess' and formula 'y ~ x'

  • 선형 항에서는 계수가 변수에 대한 직접적인 의미를 갖는 반면, 스플라인 항의 계수는 해석하기 어렵다.
  • 스플라인의 적합도를 확인하기 위해 시각화 방법을 사용히는 것이 더 유용
  • 다항회귀 모델과는 달리 스플라인 모델은 좀 더 매끄럽게 매칭되며 스플라인의 유연성이 뛰어난 것을 볼 수 있다.
  • 이 경우, 회귀선이 데이터에 더 가깝게 맞는 것을 알 수 있지만 이것이 스플라인 회귀가 더 좋다는 것을 의미할까?
  • 반드시 그런 것은 아니다. 크기가 아주 작은 주택(1,000제곱피트 미만)이 약간 큰 주택보다 더 높은 가치를 가질 것이라는 예측 결과는 경제적으로 맞지 않다.
    • 이것은 교란변수 때문일 수 있다.


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

일반화가법모델  (0) 2019.10.01
다항회귀  (0) 2019.09.30
회귀 진단: 가설 검정  (0) 2019.09.27
회귀식 해석  (0) 2019.09.27
회귀에서의 요인변수  (0) 2019.09.27
  • 응답변수와 예측변수 간의 관계가 반드시 선형일 필요는 없다.
  • 약물 복용량에 따른 반응은 일반적으로 비선형성을 띤다.
    • 복용량을 두 배로 늘린다고 두 배의 반응이 나타나지는 않는다.
  • 제품에 대한 수요 역시 어떤 시점에서는 포화 상태가 되기 쉽다 보니 , 마케팅 비용은 선형함수가 아니다.
  • 비선형 효과를 회귀분석에 담기 위해 회귀모형을 확장하는 몇 가지 방법이 있다.
    • 다항식 회귀
    • 스플라인 회귀
    • 일반화가법모델(GAM)
    • 시계열데이터인 경우 AR, MA, ARIMA 등
    • 머신러닝 모델

다항회귀

  • 다항회귀(multilinear regression):  회귀식에 다항 항을 포함한 것
  • 예를틀변 응답변수 \(Y\)와 예측변수 \(X\) 사이의 이차 회귀는 다음과 같은 식으로 표현할 수 있다.
\begin{eqnarray} Y = b_0 + b_1X + b_2X^2 + \varepsilon \end{eqnarray}

  • 다항회귀는 poly 힘수를이용해 구할수 있다.
    • 킹 카운티 주택 데이터로 구한 SqFtToLiving에 대해 이차 다항식을 적합하는 과정
      • poly(SqFtToLiving, 2)1: 일차 항(선형 항)
      • poly(SqFtToLiving, 2)2: 이차 항

> house <- read.csv('house_sales.csv', sep='\t') > house_98105 <- house[house$ZipCode == 98105,] > lm(AdjSalePrice ~ poly(SqFtTotLiving, 2) + SqFtLot + BldgGrade + Bathrooms + Bedrooms, data=house_98105) Call: lm(formula = AdjSalePrice ~ poly(SqFtTotLiving, 2) + SqFtLot + BldgGrade + Bathrooms + Bedrooms, data = house_98105) Coefficients: (Intercept) poly(SqFtTotLiving, 2)1 poly(SqFtTotLiving, 2)2 SqFtLot -402530.47 3271519.49 776934.02 32.56 BldgGrade Bathrooms Bedrooms 135717.06 -1435.12 -9191.94


    • 편잔차그림


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

일반화가법모델  (0) 2019.10.01
스플라인  (0) 2019.10.01
회귀 진단: 가설 검정  (0) 2019.09.27
회귀식 해석  (0) 2019.09.27
회귀에서의 요인변수  (0) 2019.09.27

회귀 진단

  • 설명을 위한 모델링에서는 앞서 설명한 여러 측정 지표들을 고려하여, 매 단계마다 모델이 데이터에 얼마나 적합한지를 평가
  • 대부분은 모델을 뒷받침하는 가정을 검정할 수 있는 잔차 분석을 기본으로 함
  • 이런 단계들은 직접적으로 예측 정확도를 다루는 것은 아니지만 예측 설정에 중요한 통찰을 줄수 있다.


이상점

  • 특이값이라고도 하는 극단값은 대부분의 측정값에서 멀리 벗어난 값을 의미
  • 위치와 변이를 추정할 때 이미 살펴본 것처럼, 회귀모형에서도 같은 문제가 발생
  • 회귀에서 이상점은 실제 \(y\) 값이 예측된 값에서 멀리 떨어져 있는 경우
  • 표준화잔차(standardized residuals): 잔차를 표준오차로 나눈 값
    • 이 값을 조사해서 이상점을 발견할 수 있다.
  • 이상점을 정상값들과 구분하는 데에 대한 통계 이론은 없다.
    • 어떤 관측값을 이상점이 라고 부르려면 다수 데이터로부터 얼마나 떨어져 있어야 하는지에 대한 (임의의) 경험칙이 존재
    • 예를 들어 상자그림에서 상자 경계선 바깥에 위치한 점들을 이상점이라고 본다.
    • 여기서 ‘너무 멀리 떨어져 있다는 말은 곧 ‘사분위범위의 1.5배보다 더 바깥에 있다’는 말과 같다.
  • 이와 비슷하게, 회귀에서는 이상점을 검출하기위해 표준화잔차를 주로 사용
    • 표준화잔차는 ‘회귀선으로부터 떨어진 정도를 표준오차의 수로 표현한 값’ 정도로 해석
    • 킹 카운티 주택 매매 데이터에서 우편번호가 98105인 지역의 데이터로 회귀모델링

> house <- read.csv('house_sales.csv', sep='\t') > zip_groups <- house %>% + mutate(resid = residuals(house_lm)) %>% + group_by(ZipCode) %>% + summarize(med_resid = median(resid), + cnt = n()) %>% + # sort the zip codes by the median residual + arrange(med_resid) %>% + mutate(cum_cnt = cumsum(cnt), + ZipGroup = factor(ntile(cum_cnt, 5))) > house <- house %>% + left_join(select(zip_groups, ZipCode, ZipGroup), by='ZipCode') > house_98105 <- house[house$ZipCode == 98105,] > lm_98105 <- lm(AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade, data=house_98105) > lm_98105 Call: lm(formula = AdjSalePrice ~ SqFtTotLiving + SqFtLot + Bathrooms + Bedrooms + BldgGrade, data = house_98105) Coefficients: (Intercept) SqFtTotLiving SqFtLot Bathrooms Bedrooms BldgGrade -772549.86 209.60 38.93 2282.26 -26320.27 130000.10


    • 디음과 같이 rstandard 함수를 이용해 표준화잔치를 구하고 order 힘수를 가지고 가장 작은 잔차의 위치를 얻을 수 있다.
> sresid <- rstandard(lm_98105)
> idx <- order(sresid, decreasing=FALSE)
> sresid[idx[1]]
    24333 
-4.326732 
> resid(lm_98105)[idx[1]]
    24333 
-757753.6 

    • 결과를 보면 표준오차의 4배 이상이나 회귀식과 차이가 남
    • 이에 해당하는 추정값은 $757,753. 이 특잇값에 해당하는 레코드는 디음과 같음
> house_98105[idx[1], c('AdjSalePrice', 'SqFtTotLiving', 'SqFtLot', 'Bathrooms', 'Bedrooms', 'BldgGrade')]
      AdjSalePrice SqFtTotLiving SqFtLot Bathrooms Bedrooms BldgGrade
24333       119748          2900    7276         3        6         7


    • 이 경우, 레코드가 뭔가 잘못됐다는 것을 알 수 있다.
    • 이 우편번호에 해당하는 지역에서 이 정도 평수라면 $119,748보다는 더 비싸야 정상
    • 이 주택 판매에 대한 법정 담보증서의 일부가 있어 가격이 낮은 것으므로 비정상적인 판매에 해당하며 회귀에 포함되어서는 안 된다.


  • 이상점은 ‘부주의한’ 데이터 입력 또는 단위 실수(예를 들어 천 단위를 그냥 일 단위로 기재히는 경우) 같은 문제들 때문에 발생할 수 있다.
  • 빅데이터의 경우, 새로운 데이터를 예측하기 위한 회귀분석에서 이상점이 그렇게 문제가 되지 는 않는다.
  • 그러나 이상점을 찾는 것이 주목적인 이상점 검출의 경우 이 값들이 매우 중요해진다.
  • 이상점은 사기 사건이나 갑작스러운 사건 발생과도 관련이 있다.
  • 따라서 이상점을 발견하는 것은 아주 중요한 사업 가치가 될 수 있다

영향값

  • 영향값(influential value): 있을 때와 없을 때 회귀식이 큰 차이를 보이는 값 또는 레코드
  • 주영향관측값(influential observation): 회귀모델에서 제외됐을 때중요한 변화를 가져오는 값
  • 회귀분석에서, 잔차가 크다고 해서 모두 이런 값이 되지는 않는다.
  • 사례
> seed <- 11
> set.seed(seed)
> x <- rnorm(25)
> y <- -x/5 + rnorm(25)
> x[1] <- 8
> y[1] <- 8
> plot(x, y, xlab='', ylab='', pch=16)
> model <- lm(y~x)
> abline(a=model$coefficients[1], b=model$coefficients[2], col="blue", lwd=3)
> model <- lm(y[-1]~x[-1])
> abline(a=model$coefficients[1], b=model$coefficients[2], col="red", lwd=3, lty=2)

    • 파란색 실선은 모든 데이터를 고려한 회귀선
    • 빨간색 점선은 오른쪽 위의 한 점을 제거했을 때의 회귀선
    • 오른쪽 위의 데이터 값은 회귀 결과에 큰 영향을 주지만 큰 이상점으로 나타난 것은 아니다.
    • 이 데이터 값은 회귀에 대한 높은 레버리지(leverage)를 가진 것으로 볼 수 있다

  • 단일 레코드의 영향력을 결정하는 지표
    • 햇 값(hat-value): \(2(P=1)/n\) 이상의 값들은 레버리지가 높은 데이터로 판단
    • 쿡 거리(Cook's distance): 레버리지와 잔차의 크기를 합쳐서 영향력을 판단하며 경험적으로 \(4/(n-P-1)\)보다 크면 영향력이 높다고 판단


  • 영향력 그림(influence plot) 또는 거품그림(bubble plot): 표준화잔차와 햇 값, 쿡 거리를 모두 한번에 표현하는 그림
    • 우편번호가 98105인 킹 카운티 주택 데이터에 대한 영향력 그림
> std_resid <- rstandard(lm_98105)
> cooks_D <- cooks.distance(lm_98105)
> hat_values <- hatvalues(lm_98105)
> plot(hat_values, std_resid, cex=10*sqrt(cooks_D))
> abline(h=c(-2.5, 2.5), lty=2)

    • 회귀에서 몇몇 데이터 포인트가 정말로 큰 영향력을 보임을 알 수 있다.
    • 쿡 거리는 cooks.distance 힘수를 사용해 계산하고 hatvalues 함수를 이용해 회귀 진단을 구할 수 있다.
    • 햇 값은 \(x\)축, 잔차 정보는 \(y\)축에 위치하며, 쿡 거리에 해당하는 값은 원의 크기로 표현된다


  • 전체 데이터를 모두 사용했을 때와 영향력이 가장 큰 데이터를 제거하고 구한 회귀 결과 비교
    • Bathrooms 변수의 회귀계수가 크게 변한다


  • 데이터의 규모가 작을 경우에만 영향력이 큰 관측 데이터를 확인하는 작업이 유용하며
  • 빅데이터의 경우에는 어떤 한 값이 회귀식에 큰 변화를 주기란 쉽지 않기 때문이다


이분산성

  • 잔차의 분포는 공식적인 통계적 추론(가설검정 및 \(p\)-값)의 유효성과 관련이 있어 통계학자의 관심 대상
  • 보통최소제곱(OLS) 추정은 다양한 분포 가정하에서 편향성도 없고 경우에 따라 ‘최적’이라고 할 수 있는 추정을 제공하므로 예측 정확도를 중요하게 생각하는 데이터 과학자는 잔차의 분포가 관심 대상이 아님
  • 형식적 추론이 완전히 유효하려면 잔차에 대한 3가지 가정이 필요
    • 동일한 분산을 가진다(등분산(equal variance) 가정)
    • 정규분포를 따른다(정규성(normality) 가정)
    • 서로 독립이다(독립성(independence) 가정)
  • 데이터 과학자가 신경쓰는 것 한 가지는 잔차에 대한 가정을 기반으로 예상 값에 대한 신뢰구간을 계산하는 방법

  • 이분산성(heteroskedasticity): 다양한 범위의 예측값에 따라 잔차의 분산이 일정하지 않은 것
    • 어떤 일부분에서의 오차가 다른 곳보다 훨씬 크게 나타나는 것
    • 우편번호가 98105인  킹 카운티 주택 회귀모델에서 절대잔차와 예측값의 관계
      • 잔차의 분산은 고가의 주택일수록 증가하는 경향이 있다
      • 가격이 낮은 경우도 마찬가지
      • 이 회귀모델은 주택가격이 너무 높거나 너무 낮은 경우에는 예측을 잘하지 못하므로 모델이 다소 불완전하다
> df <- data.frame(resid = residuals(lm_98105), pred = predict(lm_98105))
> ggplot(df, aes(pred, abs(resid))) + geom_point() + geom_smooth() 
`geom_smooth()` using method = 'loess' and formula 'y ~ x'



    • 잔차에 대한 히스토그램
      • 정규분포보다 확연히 더 긴 꼬리를 가지며 , 더 큰 잔차에 대해 약간의 왜곡을 보인다.
 hist(std_resid, main='')



편잔차그림과 비선형성

  • 편잔차그림(partial residual plot): 예측모델이 예측변수와 결과변수 간의 관계를 얼마나 잘 설명하는지 시각화하는 방법
    • 이상점의 검출과 함께 데이터 과학자들에게 가장 중요한 모델 진단 방법
  • 편잔차그림의 기본 개념
    • 하나의 예측변수와 응답변수 사이의 관계를 모든 다른 예측 변수로부터 분리하는 것
    • 편잔차는 단일 예측변수를 기반으로 한 예측값과 전체를 고려한 회귀식의 실제 잔차를 결합하여 ‘만든 결과’
    • 예측변수 \(X_i\)의 편잔치는 일반 잔차에 \(X_i\)와 연관된 회귀항을 더한 값
      • \(\hat{b}_i\): 회귀계수의 추정값
\begin{eqnarray} \textrm{partial residual} = \textrm{residual} + \hat{b}_iX_i\end{eqnarray}
    • R의 predict 힘수를 이용해서 개별 회귀항 \(\hat{b}_iX_i\)를 얻을 수 있다.
> terms <- predict(lm_98105, type='terms')
> partial_resid <- resid(lm_98105) + terms
> partial_resid
      SqFtTotLiving      SqFtLot   Bathrooms     Bedrooms     BldgGrade
1036    -9582.44883 -357174.9708 -450660.995 -524932.2009 -412036.63955
1769  -189558.76910  -78529.9327 -159020.193 -174374.6343 -114119.61053
1770   -98583.94036   11964.9452  -63853.317  -52887.4899 -148952.83461
1771  -130174.59786  -92384.0872 -187669.007 -176703.1797 -272768.52442
1783   306968.80331   48451.3706  -96567.562 -142236.2342   74339.15810
1784   -28140.43476 -121486.4246 -132131.685 -122877.5562  -88942.80121
1785   571952.99093  266306.1851  276268.714  284381.7110  448316.56574


  • 편잔차그림에서 \(x\)축은 \(X_i\)를, \(y\)축은 편잔차를 의미
> df <- data.frame(SqFtTotLiving = house_98105[, 'SqFtTotLiving'], Terms = terms[, 'SqFtTotLiving'], PartialResid = partial_resid[, 'SqFtTotLiving'])
> ggplot(df, aes(SqFtTotLiving, PartialResid)) + geom_point(shape=1) + scale_shape(solid = FALSE) + geom_smooth(linetype=2) + geom_line(aes(SqFtTotLiving, Terms))  
`geom_smooth()` using method = 'loess' and formula 'y ~ x'


  • 편잔차는 SqFtTotLiving 변수가 주택 가격에 얼마나 영향을 미치는지 보여준다.
    • SqFtTotLiving 변수와 가격 사이의 관계는 분명히 비선형이다.
    • 회귀선에 따르면
      • 1,000제곱피트보다 작은 평수의 집에 대해서는 가격을 원래보다 낮게 추정
      • 2,000∼3.000제곱피트 집에 대해서는 더 높게 추정
      • 4 , 000제곱피트 이상에 관해서는 데이터 개수가 너무 적어 뭐라고 결론을 내릴 수가 없다.


  • 이러한 비선형성은 이렇게 이해할 수 있다.
    • 원래 큰 집에 500제곱피트를 추가히는 것보다, 작은 집에 500제곱피트를 추가하는 것이 훨씬 더 큰 차이를 만든다.
    • 따라서 SqFtTotliving에 대해 단순선형항 대신, 비선형항을 고려할 것을 생각해볼 수 있다.



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

스플라인  (0) 2019.10.01
다항회귀  (0) 2019.09.30
회귀식 해석  (0) 2019.09.27
회귀에서의 요인변수  (0) 2019.09.27
회귀를 이용한 예측  (0) 2019.09.26

+ Recent posts