1041 [기초-산술연산] 문자 1개 입력받아 다음 문자 출력하기

x = ord(input())
print("%c"%(x+1))

1042 [기초-산술연산] 정수 2개 입력받아 나눈 몫 출력하기

a, b = map(int,input().split())
print(int(a/b))

1043 [기초-산술연산] 정수 2개 입력받아 나눈 나머지 출력하기

a, b = map(int,input().split())
print(a%b)

1044 [기초-산술연산] 정수 1개 입력받아 1 더해 출력하기

a = int(input())
print(a+1)

1045 [기초-산술연산] 정수 2개 입력받아 자동 계산하기

a, b = map(int,input().split())
print(a+b)
print(a-b)
print(a*b)
print(int(a/b))
print(a%b)
print("%.2f"%(a/b))

1046 [기초-산술연산] 정수 3개 입력받아 합과 평균 출력하기

a, b, c = map(int,input().split())
print(a+b+c)
print("%.1f" %((a+b+c)/3))

1047 [기초-비트시프트연산] 정수 1개 입력받아 2배 곱해 출력하기

a = int(input())
print("%d" % (a<<1))

1048 [기초-비트시프트연산] 한 번에 2의 거듭제곱 배로 출력하기

a, b = map(int, input().split())
print("%d" %(a<<b))

1049 [기초-비교연산] 두 정수 입력받아 비교하기1

a, b = map(int, input().split())
print("%d" %(a>b))

1050 [기초-비교연산] 두 정수 입력받아 비교하기2

a, b = map(int, input().split())
print("%d" %(a==b))

1051 [기초-비교연산] 두 정수 입력받아 비교하기3

a, b = map(int,input().split())
print("%d" %(b>=a))

1052 [기초-비교연산] 두 정수 입력받아 비교하기4

a, b = map(int,input().split())
print("%d" %(a!=b))

1053 [기초-논리연산] 참 거짓 바꾸기

a = int(input())
print("%d" %(not a))

1054 [기초-논리연산] 둘 다 참일 경우만 참 출력하기

a, b = map(int, input().split())
print("%d" %(a and b))

1055 [기초-논리연산] 하나라도 참이면 참 출력하기

a, b = map(int, input().split())
print("%d" %(a or b))

1056 [기초-논리연산] 참/거짓이 서로 다를 때에만 참 출력하기

a, b = map(int, input().split())
print("%d" %(a!=b))

1057 [기초-논리연산] 참/거짓이 서로 같을 때에만 참 출력하기

a, b = map(int, input().split())
print("%d" %(a == b))

1058 [기초-논리연산] 둘 다 거짓일 경우만 참 출력하기

a, b = map(int, input().split())
print("%d" %(not(a or b)))

1059 [기초-비트단위논리연산] 비트단위로 NOT 하여 출력하기

a = int(input())
print("%d" %(~a))

1060 [기초-비트단위논리연산] 비트단위로 AND 하여 출력하기

a, b = map(int, input().split())
print("%d" %(a&b))

4. 분류 모델 평가하기

- 예측 모델링에서, 수많은 모델을 시도해보고 각각에 홀드아웃 표본(시험표본 혹은 타당성검사 표본이라고도 부른다)을 적용하고 성능을 평가하는 것은 아주 일반적이다.

용어 의미
정확도(accuracy) 정확히 분류된 비율
혼동행렬(confusion matrix) 분류에서 예측된결과와 실제 결과에 대한 레코드의 개수를 표시한 테이블(이진형인 경우 2x2)
민감도(sensitivity) 정확히 분류된 1의 비율(유의어 : 재현율)
특이도(specificity) 정확히 분류된 0의 비율
정밀도(precision) 정확히 1이라고 예측된 1을 비율
ROC 곡선(ROC curve) 민감도와 특이성을 표시한 그림
리프트(lift) 모델이 다른 확률 컷오프에 대해 (비교적 드문) 1을 얼마나 더 효과적으로 구분하지 나타내는 측정 지표

 

- 분류 성능을 측정하는 가장 간단한 방법은 정확히 예측한 것들의 비율이 얼마인지 보는 것이다.

 

$정확도 = \frac{\sum참양성 + \sum참음성}{표본크기}$

1) 혼동행렬

- 분류 결과를 나타내는 가장 대표적인 행렬이다.

    이진 응답변수에 대한 혼동행렬과
그에 관련된 다른 지표들
 
    예측 응답변수  
    $\hat{y}=1$ $\hat{y}=0$  
실제
응답변수
$y=1$ 참 양성
(TP)
거짓 음성
(FN)
재현율(민감도)
TP / $y=1$
$y=0$ 거짓 양성
(FP)
참 음성
(TN)
특이도
FP / $y=0$
유별율
$(y=1)$ / 총 개수
정밀도
TP/($\hat{y}=1$)
  정확도
(TP+TN) / 총 개수

2) 정밀도, 재현율, 특이도

- 정밀도란, 예측된 양성 결과의 정확도를 의미한다.

 

$정밀도 = \frac{참 양성}{\sum참양성+\sum거짓양성}$

 

- 재현율(recall)은 민감도라고 부르기도 하는데, 양성 결과를 예측하는 모델의 능력을 평가한다.

 

$재현율 = \frac{참 양성}{\sum참양성+\sum거짓음성}$

 

- 특이도는 음성 결과를 정확히 예측하는 능력을 측정한다.

 

$특이도 = \frac{참음성}{\sum참음성+\sum거짓양성}$

 

3) ROC 곡선

- 재현율과 특이도 사이에는 트레이트오프 관계(시소 관계)가 있다. 1을 잘 잡아낸다는 것은 그만큼 0을 1로 잘못 예측할 가능성도 높아지는 것을 의미한다.

- 이러한 트레이트오프 관계를 표현하기 위한 지표가 바로'수신자 조작 특성(receiver operating characteristic)'곡선, 줄여서 ROC 곡선이다.

- ROC 곡선은 x축의 특이도에 대한 y축의 재현율(민감도)을 표시한다.

The ROC space for a "better" and "worse" classfier

4) AUC

- ROC 곡선 자체로는 아주 훌륭한 시각화 도구이지만, 분류기 성능을 나타내는 어떤 하나의 값을 주지는 않는다.

- 곡선 아래 면적(AUC; area underneath the curve)은 간단히 말해 ROC 곡선의 아래쪽 면적을 의미한다.

- AUC 값이 높을수록, 더 좋은 분류기이다.

- AUC가 1이라는 것은 0을 1로 잘못 예측하는 경우 없이, 1을 정확히 분류하는 완벽한 분류기를 의미한다.

- 최악의 분류기는 ROC 곡선이 가운데를 지나가는 직선인 경우, 즉 AUC가 0.5인 경우이다.

 

5) 리프트

- 무작위로 선택했을 때, 0.1%의 정확도를 얻은 반면, 상위 10%에서 0.3%의 결과를 얻었다면, 이 알고리즘은 상위 10%에서 3의 리프트(다른 표현으로 이득)를 갖는다고 할 수 있다.

 

- 리프트 차트를 계산하려면 먼저 y축에 재현율을 그리고 x축에 총 레코드 수를 나타내는 누적 이득 차트(cumulative gains chart)를 작성해야 한다.

- 리프트 곡선(lift curve)은 랜덤 선택을 의미하는 대각선에 대한 누적이득의 비율을 말한다.

- 리프트 곡선은 레코드를 1로 분류하기 위한 확률 컷오프 값에 따른 결과의 변화를 한눈에 볼 수 있게 해준다.

 

Lift Chart

- 정확도(예측한 분류 결과가 몇 퍼센트 정확한지)는 모델을 평가하는 가장 기본적인 단계이다.
- 다른 평가 지표들(재현율, 특이도, 정밀도)은 좀 더 세부적인 성능 특성들을 나타낸다(예를 들면 재현율은 모델이 1을 얼마나 정확히 분류하는지를 나타낸다).
-  AUC(ROC 곡선 아래 면적)는 모델의 1과 0을 구분하는 능력을 보여주기 위해 가장 보편적으로 사용되는 지표이다.
- 이와 비슷하게, 리프트는 모델이 1을 얼마나 효과적으로 분류해내는지를 측정한다. 가장 1로 분류될 가능성이 높은 것부터 매 십분위마다 이를 계산한다.

 


5. 불균형 데이터 다루기

용어 의미
과소표본(undersample) 분류 모델에서 개수가 많은 클래스 데이터 중 일부 소수만 사용하는 것
과잉표본(oversample) 분류 모델에서 희귀 클래스 데이터를 중복해서, 필요하면 부트스트랩 해서 사용하는 것
상향 가중치(up weight)
혹은 하향 가중치(down weight)
모델에서 희귀(혹은 다수) 클래스에 높은(혹은 낮은) 가중치를 주는 것
데이터 생성(data generation) 부트스트랩과 비슷하게 다시 샘플링한 레코드를 빼고 원래 원본과 살짝 다르게 데이터를 생성하는 것
z 점수(z-score) 표준화 결과
K 최근접 이웃 알고리즘에서 이웃들의 개수

1) 과소표본추출

- 데이터 개수가 충분하다면, 다수의 데이터에 해당하는 클래스에서 과소표본추출(다운샘플링)을 해서 모델링할 때 0과 1의 데이터 개수에 균형을 맞출 수 있다.

- 기본 아이디어는 다수의 클래스에 속한 데이터들 중에 중복된 레코드들이 많을 것이라는 사실에서 출발한다.

 

2) 과잉표본추출과 상향/하향 가중치

- 과소표본 방식의 약점으로 지적받는 부분은 일부 데이터가 버려지기 때문에 모든 정보를 활용하지 못한다는 점이다.

- 이럴 경우, 다수 클래스를 과소표본추출하는 대산, 복원추출 방식(부트스트래핑)으로 희귀 클래스의 데이터를 과잉표본추출(업샘플링)해야 한다.

- 데이터에 가중치를 적용하는 방식으로 이와 비슷한 효과를 얻을 수 있다.

 

※ 손실함수

- 많은 분류 혹은 회귀 알고리즘은, 어떤 기준 혹은 손실 함수(loss function)를 최적화한다고 볼 수 있다.

- 분류 알고리즘의 손실 함수를 직접적으로 수정하는 것은 복잡하고 어렵다.

- 반면에 가중치를 사용하는 방법은 가중치가 높은 데이터를 선호하고 가중치가 낮은 데이터의 오류를 줄여주는 식으로 손실 함수를 변경하는 것은 쉬운 방법이다.

 

3) 데이터 생성

- 부트스트랩을 통한 업샘플링 방식의 변형으로 기존에 존재하는 데이터를 살짝 바꿔 새로운 레코드를 만드는 데이터 생성 방법이 있다.

- 데이터의 개수가 제한적이기 때문에 알고리즘을 통해 분류 '규칙'을 세우기에는 정보가 충분하지 않다는 직관이 바탕에 깔려 있다.

- 통계에서 부스팅이나 배깅 같은 앙상블에 담겨 있는 개념과 매우 비슷하다.

 

※ SMOTE 알고리즘

- 합성 소수 과잉표본 기법(Synthetic Minority Oversampling Technique) 알고리즘은 업샘플링된 레코드와 비슷한 레코드를 찾고, 원래 레코드와 이웃 레코드의 랜덤 가중평균으로 새로운 합성 레코드를 만든다.

 

- 데이터의 심각한 불균형(즉, 관심 있는 결과의 데이터가 희박할 때)은 분류 알고리즘에서 문제가 될 수 있다.
- 한 방법은 다수의 데이터를 다운샘플링하거나 희귀한 데이터를 업샘플링해서 학습 데이터의 균형을 맞추는 것이다.
- 갖고 있는 1의 데이터를 모두 사용해도 그 개수가 너무 적을 때는, 희귀한 데이터에 대해 부트스트랩 방식을 사용하거나 기존의 데이터와 유사한 합성 데이터를 만들기 위해 SMOTE를 사용한다.
- 데이터에 불균형이 존재할 경우 보통은 어느 한쪽(1의 클래스)을 정확히 분류하는 것에 더 높은 점수를 주게 되어 있고, 이러한 가치 비율이 평가 지표에 반영되어야 한다.

<참고자료>
1. Peter Brucs & Andrew Brucs(2018). 데이터 과학을 위한 통계. 한빛미디어. 이용준 옮김.
2. ROC curve, Wikipedia (ROC curve)
3. Lift Chart (Lift Chart)

'공부 > 데이터 과학을 위한 통계(한빛미디어)' 카테고리의 다른 글

16. 통계적 머신러닝(2)  (0) 2021.01.11
15. 통계적 머신러닝(1)  (0) 2021.01.07
13. 분류(1)  (0) 2021.01.01
12. 회귀와 예측(2)  (0) 2020.12.31
11. 회귀와 예측(1)  (0) 2020.10.25

1021 [기초-입출력] 단어 1개 입력받아 그대로 출력하기

s = input()
print(s)

1022 [기초-입출력] 문장 1개 입력받아 그대로 출력하기

s = input()
print(s)

1023 [기초-입출력] 실수 1개 입력받아 부분별로 출력하기

a, b = input().split(".")
print(a)
print(b)

1024 [기초-입출력] 단어 1개 입력받아 나누어 출력하기

 

word = input()
a = 0
for i in word:
    print("\'%c\'" % word[a])
    a += 1

1025 [기초-입출력] 정수 1개 입력받아 나누어 출력하기

 

n = int(input())
e = n % 10
d = n % 100 - e
c = n % 1000 - (d+e)
b = n % 10000 - (c+d+e)
a = n - (b+c+d+e)
print("[%d]\n[%d]\n[%d]\n[%d]\n[%d]" %(a,b,c,d,e))
n = input()
print("[" + str(int(n[0])*10000) + "]")
print("[" + str(int(n[1])*1000) + "]")
print("[" + str(int(n[2])*100) + "]")
print("[" + str(int(n[3])*10) + "]")
print("[" + str(int(n[4])) + "]")

1026 [기초-입출력] 시분초 입력받아 분만 출력하기

 

h, m, s = input().split(":")
print(int(m))

1027 [기초-입출력] 년월일 입력받아 형식 바꿔 출력하기

 

y, m, d = input().split(".")
print("%02d-%02d-%04d" %(int(d),int(m),int(y)))

1028 [기초-데이터형] 정수 1개 입력받아 그대로 출력하기2

 

n = int(input())
print(n)

1029 [기초-데이터형] 실수 1개 입력받아 그대로 출력하기2

 

n = float(input())
print("%.11f" % n)

1030 [기초-데이터형] 정수 1개 입력받아 그대로 출력하기3

 

n = int(input())
print(n)

1031 [기초-출력변환] 10진 정수 1개 입력받아 8진수로 출력하기

 

n = int(input())
print("%o" % n)

1032 [기초-출력변환] 10진 정수 입력받아 16진수로 출력하기1

 

n = int(input())
print("%x" % n)

1033 [기초-출력변환] 10진 정수 입력받아 16진수로 출력하기2

 

n = int(input())
print("%X" % n)

1034  [기초-출력변환] 8진 정수 1개 입력받아 10진수로 출력하기

 

n = int(input(),8)
print("%d" % n)

1035 [기초-출력변환] 16진 정수 1개 입력받아 8진수로 출력하기

 

n = int(input(),16)
print("%o" % n)

 

1036 [기초-출력변환] 영문자 1개 입력받아 10진수로 출력하기

n = ord(input())
print("%d" % n)

1037 [기초-출력변환] 정수 입력받아 아스키 문자로 출력하기

 

n = chr(int(input()))
print(n)

1038 [기초-산술연산] 정수 2개 입력받아 합 출력하기1

 

a, b = map(int, input().split())
print(a+b)

1039 [기초-산술연산] 정수 2개 입력받아 합 출력하기2

 

a, b = map(int, input().split())
print(a+b)

1040 [기초-산술연산] 정수 1개 입력받아 부호 바꿔 출력하기

 

n = int(input())
print(-n)

1001 [기초-출력] 출력하기1

print("Hello")

1002 [기초-출력] 출력하기2

print("Hello World")

1003 [기초-출력] 출력하기3

print("Hello\nWorld")

1004 [기초-출력] 출력하기4

print("\'Hello\'")

1005 [기초-출력] 출력하기5

print("\"Hello World\"")

1006 [기초-출력] 출력하기6

print("\"!@#$%^&*()\"")

1007 [기초-출력] 출력하기7

print("\"C:\Download\hello.cpp\"")

1008 [기초-출력] 출력하기8

print("\u250C\u252C\u2510")
print("\u251C\u253C\u2524")
print("\u2514\u2534\u2518")

1010 [기초-입출력] 정수 1개 입력받아 그대로 출력하기

n = int(input())
print(n)

1011 [기초-입출력] 문자 1개 입력받아 그대로 출력하기

n = input()
print(n)

1012 [기초-입출력] 실수 1개 입력받아 그대로 출력하기

x = float(input())
print("%f" % n)
x = float(input())
print(n)

- 이 경우에 아래의 코드는 정답처리가 되지않았다. 특별히 다른 부분이 없는 것 같은데 파이썬 언어의 문제인지 확인이 필요하다.

 

1013 [기초-입출력] 정수 2개 입력받아 그대로 출력하기

x, y = map(int,input().split())
print(x,y)

1014 [기초-입출력] 문자 2개 입력받아 순서 바꿔 출력하기

x, y = input().split()
print(y,x)

1015 [기초-입출력] 실수 입력받아 둘째 자리까지 출력하기

x = float(input())
print("%.2f" % x )

1017 [기초-입출력] 정수 1개 입력받아 3번 출력하기

x = int(input())
print(x, x, x)

1018 [기초-입출력] 시간 입력받아 그대로 출력하기

h, m = input().split(":")
print(int(h), int(m), sep=":")

1019 [기초-입출력] 연월일 입력받아 그대로 출력하기

y, m, d = map(int,input().split("."))
print("%04d.%02d.%02d" %(y,m,d))

1020 [기초-입출력] 주민번호 입력받아 형태 바꿔 출력하기

x, y = map(int,input().split("-"))
print("%06d%07d"%(x,y))

Chapter 5. 분류

분류(classification) 문제

- 가장 중요한 예측 유형이라고 할 수 있다. 데이터가 0인지 1인지를 분류하거나, 여러 카테고리 중 어디에 속할지 예측하는 것을 목표로 한다.

 

※ 범주 항목이 두 가지 이상이라 일련의 이진 문제로 변환하는 것이 종종 유리하다.

1. 나이브 베이즈

나이브 베이즈(naive Bayes) 알고리즘은 주어진 결과에 대해 예측변수 값을 관찰할 확률을 사용하여, 예측변수가 주어 졌을 때, 결과 $Y=i$를 관찰할 확률을 추정한다.

용어 의미
조건부확률(conditional probability) 어떤 사건($Y=i$)이 주어졌을 때, 해당 사건($X=i$)을 관찰할 확률 $P(X_i\mid Y_i)$
사후확률(posterior probability) 예측 정보를 통합한 후 결과의 확률
(사전확률에서는 예측변수에 대한 정보를 고려하지 않는다.)

 

※ 나이브한 해법

1) 이진 응답 $Y=i$($i=0$ 또는 1)에 대해, 각 예측변수에 대한 조건부확률 $P(X_j\mid Y=i)$를 구한다.

2) 각 확률값을 곱한 다음, $Y=i$에 속한 레코드들의 비율을 곱한다.

3) 모든 클래스에 대해 1~2 단계를 반복한다.

4) 2단계에서 모든 클래스에 대해 구한 확률 값을 모두 더한 값으로 클래스 $i$의 확률을 나누면 결과 $i$의 확률을 구할 수 있다.

5) 이 예측변수에 대해 가장 높은 확률을 갖는 클래스를 해당 레코드에 할당한다.

 

$P(X_1,X_2,\cdot\cdot\cdot,X_p)$ 값은 확률이 $Y$에 독립이면서 0과 1 사이에 오도록 하기 위한 스케일링 계수이다.

 

$P(X_1,X_2,\cdot\cdot\cdot,X_p) = P(Y=0)\left[P(X_1\mid Y=0)P(X_2\mid Y=0)\cdot\cdot\cdot P(X_p\mid Y=0)\right]$

$+P(Y=1)\left[P(X_1\mid Y=0)P(X_2\mid Y=0)\cdot\cdot\cdot P(X_p\mid Y=0)\right]$

-> $X_j$가 $k\neq j$인 모든 $X_k$와 서로 독립이라고 가정.

 

※ 수치형 예측변수

  • 수치형 예측변수를 비닝(binning)하여 범주형으로 변환한 뒤, 알고리즘을 적용한다.
  • 조건부확률 $P(X_j\mid Y=i)$를 추정하기 위해 정규분포 같은 확률모형을 사용한다.

- 수치형 변수에 나이브 베이즈 방법을 적용하기 위해서는 두 가지 접근법 중 하나를 따라야 한다.

 

- 나이브 베이즈는 예측변수와 결과변수 모두 범주형(요인)이어야 한다.
- '각 출력 카테고리 안에서, 어떤 예측변수의 카테고리가 가장 가능성이 높은가?'가 답하고자 하는 질문이다.
- 그리고 이 정보는 주어진 예측변수 값에 대해, 결과 카테고리의 확률을 추정하는 것으로 바뀐다.

2. 판별분석

- 판별분석(discriminant analysis)은 초창기의 통계 분류방법이다.

용어 의미
공분산(covariance) 하나의 변수가 다른 변수와 함께 변화하는 정도를 측정하는 지표
판별함수(discriminant function) 예측변수에 적용했을 때, 클래스 구분을 최대화 하는 함수
판별 가중치(discriminant weight) 판별함수를 적용하여 얻은 점수를 말하며, 어떤 클래스에 속할 확률을 추정하는 데 사용된다.

- 판별분석 중 가장 일반적으로 사용되는 것은 선형판별분석(LDA; linear diuscriminant analysis)이다.

- 판별분석은 예측변수들의 중요성을 측정하거나 효과적으로 특징을 선택하는 방법으로도 사용된다.

1) 공분산행렬

- 공분산이란 두 변수 $x$와 $z$ 사이의 관계를 의미하는 지표이다.

 

$s_{x,z}=\frac{\sum_{i=1}^n(x_i-\bar{x})(z_i-\bar{z})}{n-1}$

 

- 양수는 양의 관계를, 음수는 음의 관계를 나타낸다. 공분산은 상관계수와는 다르게 변수 $x$와 $z$에서 사용하는 척도와 동일한 척도에서 정의된다.

 

$\hat{\sum}=\begin{bmatrix}{s_x}^2 & s_{x,z} \\s_{x,z} & {s_z}^2 \end{bmatrix}$

 

2) 피셔의 선형판별

- 판별분석은 보통 예측변수가 정규분포를 따르는 연속적인 변수라는 가정이 있지만 실제로는 정규분포에서 벗어나거나 이진 예측변수에 대해서도 잘 동작한다.

 

- LDA는 '내부'제곱합 $SS_{내부}$(그룹 안의 변동을 측정)에 대한 '사이'제곱합 $SS_{사이}$((두 그룹 사이의 편차를 측정)의 비율을 최대화하는 것을 목표로 한다.

$SS_{사이}$ : 두 그룹 평균 사이의 거리

$SS_{내부}$ : 공분산행렬에 의해 가중치가 적용된, 각 그룹 내의 평균을 주변으로 퍼져있는 정도

 

※ R에서는 MASS 라이브러리의 LDA 함수를 이용해서 계산할 수 있다.

 

- 판별분석은 예측변수나 결과변수가 범주형이든 연속형이든 상관없이 잘 동작한다.
- 공분산행렬을 사용하여 한 클래스와 다른 클래스에 속한 데이터들을 구분하는 선형판별함수를 계산할 수 있다.
- 이 함수를 통해 각 레코드가 어떤 클래스에 속할 가중치 혹은 점수를 구한다.

3. 로지스틱 회귀

- 결과가 이진형 변수라는 점만 제외하면 다중선형회귀와 유사하다.

- 데이터 위주의 접근 방식이라기보다, 구조화된 모델 접근 방식이라고 할 수 있다.

용어 의미
로짓(logit) (0~1이 아니라) $\pm\inf$의 범위에서 어떤 클래스에 속할 확률을 결정하는 함수
오즈(odds) '실패'(0)에 대한 '성공'(1)의 비율
로그 오즈(log odds) 변환 모델(선형)의 응답변수. 이 값을 통해 확률을 구한다

1) 로지스틱 반응 함수와 로짓

예측변수에 로지스틱 반응 혹은 역 로짓 함수라는 것을 적용해서 $p$를 모델링한다.

 

$p=\frac{1}{e^{-(\beta_0+\beta_1x_1+\beta_2x_2+\cdot\cdot\cdot +\beta_qx_q)}}$

 

-> 이 과정을 통해 우리는 $p$가 항상 0에서 1 사이에 오도록 할 수 있다.

 

분모의 지수부분을 구하려면 확률 대신 오즈비를 이용한다.

- 오즈비는 '성공'(1)과 '실패'(0)의 비율을 말한다. 확률의 관점에서, 오즈비는 사건이 발생할 확률을 사건이 발생하지 않을 확률로 나눈 비율이다.

 

오즈$(Y=1) = \frac{p}{1-p}$

 

오즈 수식을 로지스틱 반응 함수에 적용하면 아래의 수식을 얻을 수 있다.

 

오즈$(Y=1) = e^{\beta_0 + \beta_1x_1 + \beta_2x_2 + \cdot\cdot\cdot + \beta_qx_q}$

 

마지막으로 양변에 로그 함수를 취하면 우리는 예측변수에 대한 선형함수를 얻을 수 있다.

 

log(오즈($Y=1$)) = $\beta_0+\beta_1x_1+\beta_2x_2+\cdot\cdot\cdot+\beta_qx_q$

 

로그 오즈 함수, 또는 로짓 함수는 0과 1 사이의 확률 $p$를 -Inf에서 +Inf까지의 값으로 매핑해준다.

 

2) 로지스틱 회귀와 GLM

- 로지스틱 회귀는 선형회귀를 확장한 일반선형모형(GLM)의 특별한 사례이다.

- 회귀에서처럼, $P$개의 수준을 갖는 요인변수는 $P-1$개의 열로 표시할 수 있다.

 

3) 일반화선형모형

- 일반화선형모형(GLM; generalized linear model)은 회귀와 함께 두 번째로 가장 중요한 모델이다. GLM은 다음 두 가지 주요 구성 요소로 특징지어진다.

  • 확률분포 또는 분포군(로지스틱 회귀의 경우 이항분포)
  • 응답을 예측변수에 매핑하는 연결함수(로지스틱 회귀의 경우 로짓)

- 로지스틱 회귀는 GLM의 가장 널리 알려진 일반적인 형태이다.

 

4) 로지스틱 회귀의 예측값

- 로지스틱 회귀에서 예측하는 값은 로그 오즈 $\hat{Y}$ = log(오즈($Y=1$))에 관한 값이다.

 

$\hat{p} = \frac{1}{1+e^{-\hat{Y}}}$

 

5) 계수와 오즈비 해석하기

- 로지스틱 회귀의 장점 중 하나는 재계산 없이 새 데이터에 대해 빨리 결과를 계산할 수 있다.

- 또 다른 장점은 모델을 해석하기가 다른 분류 방법들에 비해 상대적으로 쉽다.

-> 이를 위해서 오즈비의 개념을 이해하는 것이 중요하다.

 

$오즈비 = 오즈비 = \frac{오즈(Y=1\mid X=1)}{오즈(Y=1\mid X=0)}$

 

-> X=1일 때 Y=1인 경우의 오즈와 X=0일 때 Y=1인 경우의 오즈를 비교한 것이다.

-> 만약 오즈비가 2이면, 이것은 X=1일 때 Y=1의 오즈가 X=0일 때보다 두 배 더 높다는 것을 의미한다.

 

6) 선형회귀와 로지스틱 회귀: 유사점과 차이점

 

- 다중선형회귀와 로지스틱 회귀의 공통점

  • 예측변수와 응답변수를 선형 관계로 가정한다.
  • 가장 좋은 모델을 탐색하고 찾는 과정이 유사하다.
  • 대부분의 선형모형에서, 예측변수에 스플라인 변환을 사용하는 방법은 로지스틱 회귀 설정에서도 똑같이 적용할 수 있다.

- 다중선형회귀와 로지스틱 회귀의 차이점

  • 모델을 피팅하는 방식(최소제곱을 사용할 수 없다)
  • 모델에서 잔차의 특징과 분석

< 모델 피팅 >

- 선형회귀에서는 모델 피팅을 위해 최소제곱을 사용한다. RMSE와 R 제곱 통계량을 사용하여 피팅의 성능을 평가한다.

 

- 로지스틱 회귀분석에서는 닫힌 형태의 해가 없으므로 최대우도추정(MIE; maximum likelihood estimation)을 사용하여 모델을 피팅해야한다.

- 최대우도추정이란 데이터를 생성했을 때 가능성이 가장 큰 모델을 찾는 프로세스를 말한다.

 

$편차 = -2log(P_\hat{\theta}(X_1,X_2,\cdot\cdot\cdot ,X_n))$

 

편차가 작을수록 모델 적합도가 높은 것을 의미한다.

 

7)  모델 평가하기

- p 값을 해석할 때, 회귀에서 언급했던 주의사항도 같이 따라온다. 통계적인 유의성을 측정하는 지표로 보기보다는 변수의 중요성을 나타내는 상대적인 지표로 봐야한다.

- 로지스틱 회귀가 선형회귀와 다른 부분은 바로 잔차에 대한 분석에 관한 내용이다.

 

- 로지스틱 회귀는 출력이 이진변수라는 점만 빼면, 선형회귀와 매우 비슷하다.
- 선형모형과 비슷한 형태의 모델을 만들기 위해, 응답변수로 오즈비의 로그값을 사용하는 등의 몇 가지 변환이 필요하다.
- 반복 과정을 통해 선형모형을 피팅하고 나면, 로그 오즈비는 다시 확률값으로 변환된다.
- 로지스틱 회귀는 계산 속도가 빠르고 새로운 데이터에 대해서도 빠르게 결과를 구할 수 있다는 장점 때문에 많이 사용된다.

<참고자료>
1. Peter Brucs & Andrew Brucs(2018). 데이터 과학을 위한 통계. 한빛미디어. 이용준 옮김.

'공부 > 데이터 과학을 위한 통계(한빛미디어)' 카테고리의 다른 글

15. 통계적 머신러닝(1)  (0) 2021.01.07
14. 분류(2)  (0) 2021.01.05
12. 회귀와 예측(2)  (0) 2020.12.31
11. 회귀와 예측(1)  (0) 2020.10.25
10. 통계적 실험과 유의성 검정(2)  (0) 2020.10.20

5. 회귀방정식 해석

- Dats Science에서 회귀의 가장 중요한 용도는 일부 종속변수를 예측하는 것이다.

용어 의미
변수 간 상관(correlated variables) 예측변수들끼리 서로 높은 상관성을 갖을 때, 개별 계수를 해석하는 것은 어렵다.
다중공선성(multicollinearity) 예측변수들이 완벽하거나 거의 완벽에 가까운 상관성을 갖는다고 할 때, 회귀는 불안정하며 계산이 불가능하다.
교란변수(confounding variable) 중요한 예측변수지만 회귀방정식에 누락되어 결과를 잘못되게 이끄는 변수
주효과(main effect) 다른 변수들과 독립된, 하나의 예측변수와 결과변수 사이의 관계
상포작용(interaction) 둘 이상의 예측변수와 응답변수 사이의 상호 의존적인 관계

1) 예측변수 간 상관

- 상호 연관된 예측변수들을 사용하면 회귀계수의 부호와 값의 의미를 해석하기가 어려울 수 있다.(또한 추정치의 표준오차가 커진다.)

2) 다중공선성

  • 오류로 인해 한 변수가 여러 번 포함된 경우
  • 요인변수로부터 $P-1$개가 아닌 $P$개의 가변수가 만들어진 경우
  • 두 변수가 서로 거의 완벽하게 상관성이 있는 경우

위의 경우에 다중공선성이 나타나며, 이는 예측변수 사이의 중복성을 판단하는 조건이 된다.

 

※ 다중공선성이 존재하는 상황에서는 회귀를 통해 제대로 된 답을 얻을 수가 없다.

3) 교란변수

- 교란변수는 회귀방정식에 중요한 변수가 포함되지 못해서 생기는 누락의 문제이다.

4) 상호작용과 주효과

통계학자는 주효과(독립변수)와 주효과 사이의 상호작용을 구별하기 좋아한다. 주효과는 회귀방정식에서 종종 예측변수라고 불린다. 모델에서 주효과만 사용한다면, 여기에는 예측변수와 응답변수 간의 관계가 다른 예측변수들에 대해 독립적이라는 암묵적인 가정이 있다. 하지만, 이것은 종종 사실이 아니다.


6. 가정 검정: 회귀 진단

용어 의미
표준화잔차(standardized residual) 잔차를 표준오차로 나눈 값
특잇값(outliet) 나머지 데이터(혹은 예측값)와 멀리 떨어진 레코드(혹은 출력값)
영향값(influential value) 있을 때와 없을 때 회귀방정식이 큰 차이를 보이는 값 혹은 레코드
지렛대(leverage) 회귀식에 한 레코드가 미치는 영향력의 정도
비정규 잔차(non-normal residual) 정규분포를 따르지 않는 잔차는 회귀분석의 요건을 무효로 만들 수 있다. 데이터 과학에서는 별로 중요하게 다뤄지지 않는다.
이분산성(heteroskedasticity) 어떤 범위 내 출력값의 잔차가 매우 놓은 분산을 보이는 경향(어떤 예측변수를 회귀식이 놓치고 있다는 것을 의미할 수 있다.)
편잔차그림(partial residual plot) 결과 변수와 특정 예측변수 사이의 관계를 진단하는 그림

1) 특잇값

- 대부분의 측정치에서 멀리 벗어난 값을 의미한다. 회귀에서 특잇값은 실제 $y$값이 예측된 값에서 멀리 떨어져 있는 경우를 말한다. 잔차를 표준오차로 나눈 값을 표준화잔차라고 하는데 바로 이 값을 조사해서 특잇값을 발견할 수 있다.

 

- 특잇값을 정상값들과 구분하는 데에 대한 통계 이론은 없다. 그보다, 어떤 관측값을 특잇값이라고 부르려면 다수 데이터로부터 얼마나 떨어져 있어야 하는지에 대한 (임의의) 경험칙이 존재한다.

2) 영향값

- 회귀모형에서 제외됐을 때 모델에 중요한 변화를 가져오는 값을 주영향관측값(influential observation)이라고 한다.

- 데이터 값은 회귀 결과에 큰 영향을 미치지만, 원래 회귀에서 큰 특잇값으로 나타난 것은 아니다. 이 데이터 값은 회귀에 대한 높은 레버리지를 가진 것으로 볼 수 있다.

 

- 레버리지를 측정하는 일반적인 척도는 햇 값(hat-value)이다. $2(P+1)/n$ 이상의 값들은 레버리지가 높은 데이터 값을 타나낸다.

 

- 또 다른 측정 지표는 쿡의 거리(Cook's distance)이다. 이것은 레버리지와 잔차의 크기를 합쳐서 영향력을 판단한다. 경험칙에 따르면, 쿡의 거리가 $4/(n-P-1)$ 보다 크면 영향력이 높다고 보는 편이다.

3) 이분산성, 비정규성, 오차 간 상관

잔차의 가정

- 동일한 분산을 가진다.

- 정규분포를 따른다.

- 서로 독립이다.

 

- 이분산성 : 다양한 범위의 예측값에 따라 잔차의 분산이 일정하지 않은 것. -> ggplot2 패키지를 사용하면 잔차들의 분포를 쉽게 구할 수 있다.

 

- 더빈-왓슨 통계량(Durbin-Watson Statistic) : 시계열 데이터를 다루는 회귀분석에서 유의미한 자기상관이 있는데 탐지.

4) 편잔차그림과 비선형성

- 편잔차그림 : 예측 모델이 예측변수와 결과변수 간의 관계를 얼마나 잘 설명하는지 시각화하는 방법.

-> 기본개념은 하나의 예측변수와 응답변수 사이의 관계를 모든 다른 예측변수로부터 분리하는 것이다.

 

편잔차 = 잔차 + $\widehat{b_i}X_i$


7. 다항회귀와 스플라인 회귀

- 응답변수와 예측변수 간의 관계가 반드시 선형일 필요가 없다.

용어 의미
다항회귀(polynomial regression) 회귀모형에서 다항식(제곱, 세제곱 등) 항을 추가한 방식
스플라인 회귀(spline regression) 다항 구간들을 부드러운 곡선 형태로 피팅한다.
매듭(knot) 스플라인 구간을 구분하는 값들
일반화가법모형(generalized additive model) 자동으로 구간을 결정하는 스플라인 모델

 

- 비선형회귀(nonlinear regression)은 최소제곱 방법으로 피팅할 수 없는 모델을 의미한다. 비선형회귀 모델은 수치 최적화가 필요하기 때문에 피팅하기가 어렵고 더 많은 계산을 필요로 한다. 이러한 이유로 선형모형을 이용하는 것이 일반적이다.

1) 다항식

- 회귀식에 다항 항을 포함한 것을 말한다.

$Y = b_0 + b_1X + b_2X^2 + e$

 

- R에서 poly 함수를 이용해 구할 수 있다.

2) 스플라인

- 비선형 관계를 모델링하는 또 더 나은 방법은 스플라인을 이용하는 것이다. 스플라인은 고정된 점들 사이를 부드럽게 보간하는 방법을 말한다.

 

- R 패키지 splines는 회귀모형에서 b-스플라인(b-spline) 항을 만드는 데 사용할 수 있는 bs함수를 포함한다.

 

- 스플라인 항의 계수는 해석하기 어렵다. 대신, 스플라인의 적합도를 확인하기 위해 시각화 방법을 사용하는 것이 유용하다.

3) 일반화가법모형

- 일반화가법모형(GAM)은 스플라인 회귀를 자동으로 찾는 기술이다.

- R의 gam패키지를 사용한다.(library : mgcv)

 


  • 회귀분석에서 특잇값은 잔차가 큰 레코드를 말한다.
  • 다중공선성은 회귀방정식을 피팅할 때 수치 불안정성을 가져올 수 있다.
  • 교란변수는 모델에서 생략된 중요한 예측변수이며 허위 관계를 보여주는 회귀 결과를 낳을 수 있다.
  • 한 변수의 효과가 다른 변수의 수준에 영향을 받는다면 두 변수 사이의 상호작용을 고려할 항이 필요하다.
  • 다항회귀분석은 예측변수와 결과변수 간의 비선형 관계를 검증할 수 있다.
  • 스플라인은 매듭들로 함께 묶여 있는 일련의 구간별 다항식을 말한다.
  • 일반화가법모형(GAM)은 스플라인의 맫브을 자동으로 결정하는 프로세스를 가지고 있다.

 

< 참고자료 >
1. Peter Brucs & Andrew Brucs (2018), 데이터 과학을 위한 통계. 한빛미디어. 이용준 옮김.

'공부 > 데이터 과학을 위한 통계(한빛미디어)' 카테고리의 다른 글

14. 분류(2)  (0) 2021.01.05
13. 분류(1)  (0) 2021.01.01
11. 회귀와 예측(1)  (0) 2020.10.25
10. 통계적 실험과 유의성 검정(2)  (0) 2020.10.20
9. 통계적 실험과 유의성 검정(1)  (0) 2020.10.12

CHAPTER 4. 회귀와 예측

1. 단순선형회귀

- 단순선형회귀 모델은 한 변수와 또 다른 변수의 크기 사이에 어떤 관계가 있는지를 보여준다.

 

* 상관관계 vs 회귀

- 상관관계는 두 변수 사이의 전체적인 관련 강도를 측정하는 것이라면, 회귀는 관계 자체를 정량화하는 방법이라는 점에서 차이가 있다.

용어 의미
반응변수(response variable) 예측하고자 하는 변수
독립변수(indenpendent variable) 응답치를 예측하기 위해 사용되는 변수
레코드(record) 한 특정 경우에 대한 입력과 출력을 담고 있는 벡터
절편(intercept) 회귀직선의 절편.$X=0$일 때 예측값
회귀계수(regression coefficient) 회귀직선의 기울기
적합값(fitted value) 회귀선으로부터 얻은 추정치 $\hat{Y_{i}}$(=예측값)
잔차(residual) 관측값과 적합값의 차이(=오차)
최소제곱(least square) 잔차의 제곱합을 최소화하여 회귀를 피팅하는 방법

1) 회귀식

$Y=b_{0}+b_{1}X$

$b_{0}$ = 절편(상수), $b_{1}$ = $X$의 기울기(slope), 보통은 주로 계수(coefficient)라고 한다.

$Y$는 $X$에 따라 달라지기 때문에, 응답변수 혹은 종속변수라고 불리며, $X$는 독립변수 혹은 예측변수라고 한다.

- R에서는 lm으로 선형회귀 함수를 피팅한다. lm은 선형모형을 뜻하는 linear model의 줄임말이다.

 

2) 적합값과 잔차

- 보통 모든 데이터가 정확히 한 직선 안에 들어오지는 않기 때문에, 회기식은 명시적으로 오차항 $e_{i}$를 포함한다.

$Y=b_{0}+b_{1}X+e_{i}$

 - 적합값은 예측값을 지칭하는 말로, 보통 $\hat{Y_{i}}$(Y 햇)으로 나타낸다.

$\hat{Y_{i}}=\hat{b_{0}}+\hat{b_{1}}{X_{i}}$

$\hat{b_{0}}$과 $\hat{b_{0}}$은 이미 알려진 값이 아닌 추정을 통해 얻은 값이라는 것을 의미한다.

여기서 잔차 $\hat{e_{i}}$은 원래 값에서 예측한 값을 빼서 구한다.

$\hat{e_{i}}=Y_{i}-\hat{Y_{i}}$

- R에서 제공하는 predict와 residuals 함수를 통해 적합값과 잔차를 구할 수 있다.

 

3) 최소제곱

- 회귀선은 잔차들을 제곱한 값들의 합인 잔차 제곱합(residual sum of squares; RSS)을 최소화하는 선이다.

 

$RSS=\sum_{i=1}^n(Y_{i}-\hat{Y_{i}})=\sum_{i=1}^n(Y_{i}-\hat{b_{0}}-\hat{b_{1}}{X_{i}})$

다시 말해 추정치 $\hat{b_{0}}$과 $\hat{b_{1}}$는 RSS를 최소화하는 값이다.

 

잔차제곱합을 최소화하는 이러한 방법을 최소제곱회귀 혹은 보통최소제곱(ordinary least squares; OLS) 회귀라고 한다. 최소제곱회귀는 계수 계산을 위해 아래의 공식을 사용한다.

 

$\hat{b_{1}}=\frac{\sum_{i=1}^n(Y_i-\overline{Y})(X_i-\overline{X})}{\sum_{i=1}^n(X_i-\overline{X})^2}$

$\hat{b_{0}}=\overline{Y}-\hat{b_{1}}\overline{X}$

 

4) 예측 대 설명

과거

- 예측변수와 결과변수 사이에 있을 것으로 추정되는 선형 관계를 밝히는 것이 회귀분석의 주된 용도였다. 회귀로 피팅한 데이터를 통해, 데이터 간의 관계를 이해하고 그것을 설명하는 것을 목표로 해왔다.

 

현재

- 빅데이터의 출현과 함께 회귀분석은 수중에 있는 데이터를 설명하기보다는 새로운 데이터에 대한 개별 결과를 예측하는 모델(예측 모델)을 구성하는 데 널리 사용된다.


2. 다중선형회귀

$Y=b_{0}+b_{1}X_{1}+b_{2}X_{2}+...+b_{p}X_{p}+e$

용어 의미
제곱근 평균제곱오차(root mean squared error; RMSE) 회귀 시 평균제곱오차의 제곱근. 회귀모형을 평갛는 데 가장 널리 사용되는 측정 지표다.
잔차 표준오차(residual standard error; RSE) 평균제곱오차와 동일하지만 자유도에 따라 보정된 값
R 제곱($R^2$ r-squared) 0에서 1까지 모델에 의해 설명된 분산의 비율(결정계수; coefficient of determination) 
t 통계량(t-statistic) 계수의 표준오차로 나눈 예측변수의 계수. 모델에서 변수의 중요도를 비교하는 기준이 된다.
가중회귀(weighted regression) 다른 가중치를 가진 레코드를 회귀하는 방법

1) 모형 평가

- 제곱근 평균제곱오차(RMSE)

: 예측된 $\hat{Y_{i}}$값들의 평균제곱오차의 제곱근을 말한다. 전반적인 모델의 정확도를 측정하고 다른 모델과 비교하기 위한 기준이 된다.

$RMSE=\sqrt{\frac{\sum_{i=1}^n(y_{i}-\hat{y_{i}})^2}{n}}$

 

이 외에도 RMSE와 유사한 잔차 표준오차(RSE)가 있다.

$RSE=\sqrt{\frac{\sum_{i=1}^n(y_{i}-\hat{y_{i}})^2}{n-p-1}}$

 

- 결정계수($R^2$)

: R 제곱의 범위는 0에서 1까지이며 모델 데이터의 변동률을 측정한다. 모델이 데이터에 얼마나 적합한지 평가하고자 할 때, 회귀분석을 설명하기 위한 용도로 활용된다.

$R^2=1-\frac{\sum_{i=1}^n(y_i-\hat{y_{i}})^2}{\sum_{i=1}^n(y_i-\bar{y})^2}$

- t 통계량

: t 통계량과 p 값은 계수가 '통계적으로 유의미한 정도', 즉 예측변수와 목표변수를 랜덤하게 재배치했을 때 우연히 얻을 수 있는 범위를 어느 정도 벗어났는지를 측정한다. t 통계량이 높을수록(p 값이 낮을수록) 예측변수는 더욱 유의미하다.

$t_b=\frac{\hat{b}}{SE(\hat{b})}$

2) 교차타당성검사

- 교차타당성검사(cross-validation)란, 홀드아웃 샘플 아이디어를 여러 개의 연속된 홀드아웃 샘플로 확장한 것이다. 기본적인 k 다중 교차타당성검사(k-fold cross-validation)알고리즘은 아래와 같다.

 

  1. $\frac{1}{k}$의 데이터를 홀드아웃 샘플로 따로 떼어놓는다.
  2. 남아 있는 데이터로 모델을 훈련시킨다.
  3. 모델을 $\frac{1}{k}$ 홀드아웃에 적용하고 필요한 모델 평가 지표를 기록한다.
  4. 데이터의 첫 번째 $\frac{1}{k}$을 복원하고 다음 $\frac{1}{k}$을 제외하고 따로 보관한다.
  5. 2~3단계를 반복한다.
  6. 모든 레코드가 홀드아웃 샘플로 사용될 때까지 반복한다.
  7. 모델 평가 지표들을 평균과 같은 방식으로 결합한다.

- 훈련을 위한 샘플과 홀드아웃 샘플로 데이터를 나누는 것을 폴드(fold)라고 한다.

 

3) 모형 선택 및 단계적 회귀

- 통계학에서는 모든 것이 동일한 조건에서는, 복잡한 모델보다는 단순한 모델을 우선 사용해야 한다는 오컴의 면도날이라는 원리를 사용한다.

- 변수를 추가하면 항상 RMSE는 감소하고 $R^2$은 증가한다.

- AIC(Akaike's information criterai)은 모델에 항을 추가할수록 불이익을 주는 측정 기준이다.

$AIC=2P+nlog(RSS/n)$

P는 변수의 개수이고 n은 레코드의 개수이다. 목표는 AIC를 최소화하는 모델을 찾는 것이다.

 

  • $AIC_v$ : 크기가 작은 표본을 위해 수정된 AIC
  • BIC(Bayesian information criteria) : AIC와 비슷하지만 변수 추가에 대해 더 강한 벌점을 주는 정보기준
  • 맬로즈 $C_p$ : 콜린 링우드 맬로스(Collin Lingwood Mallows)가 제안한 AIC 변형

 

* AIC 최소화하는 모델을 찾는 방법

방법 의미
부분집합회귀(all subset regression) 모든 가능한 모델을 검색하는 방법
전진선택(forward selection) 예측변수 없이 시작하여 각 단계에서 $R^2$에 가장 큰 기여도를 갖는 예측변수를 하나씩 추가하고 기여도가 통계적으로 더 이상 유의미하지 않을 때 중지한다.
후진제거(backward elimination) 전체 모델로 시작해서, 모든 예측변수가 통계적으로 유의미한 모델이 될 때까지, 통계적으로 유의하지 않은 예측변수들을 제거해나간다.
단계적 회귀(stepwise regression) 예측변수를 연속적으로 추가/삭제하여 AIC를 낮추는 모델을 찾는 방법(R에서는 MASS패키지의 stepAIC라는 단계적 회귀 함수를 제공한다.)

- 벌점회귀(penalized regression)는 개념적으로 AIC와 같다. 개별 모델 집합들을 명시적으로 검색하는 대신 모델 적합 방정식에 많은 변수에 대해 모델에 불이익을 주는 제약 조건을 추가한다. 자주 사용되는 방법으로는 능형회귀라소가 있다.

 

* 단계적 회귀분석과 모든 부분집합회귀는 모델을 평가하고 조정하는 표본 내 방법이다. 따라서 선택된 모델이 과적합 될 수 있으며, 새 데이터를 적용할 때 잘 맞지 않을 수도 있다. 이를 방지하기 위한 접근법 중 하나는 교차타당성검사를 통해 모델의 유효성을 알아보는 것이다.

 

4) 가중회귀

- 아래의 두 가지 점에서 가중회귀의 유용성을 발견할 수 있다.

  • 서로 다른 관측치를 다른 정밀도로 측정했을 때, 역분산 가중치를 얻을 수 있다.
  • 가중치 변수가 집계된 데이터의 각 행이 나타내는 원본 관측치의 수를 인코딩하도록 집계된 형식의 데이터를 분석할 수 있다.

3. 회귀를 이용한 예측

- 통계학에서와는 다르게 데이터 과학에서 회귀의 주된 목적은 예측이다.

용어 의미
예측구간(prediction interval) 개별 예측값 주위의 불확실한 구간
외삽법(extrapolation) 모델링에 사용된 데이터 범위를 벗어나 부분까지 모델을 확장하는 것

1) 외삽의 위험

- 회귀모형은 충분한 데이터 값이 있는 예측변수에 대해서만 유효하기 때문에 데이터 범위를 초과하면서까지 외삽하는 데 사용해서는 안된다.

2) 신뢰구간과 예측구간

- 신뢰구간은 회귀계수 주변의 불확실성을 정량화한다.

- 예측구간은 개별 예측값의 불확실성을 정량화한다.

 

- 통계학은 불확실성을 이해하고 측정하는 것을 포함한다. 회귀분석 결과에 나오는 t 통계량과 p 값은 불확실성을 다루는 아주 일반적인 방법이고, 종종 변수 선택을 위해 활용된다.

 

- 데이터 과학에서는 예측된 $y$ 값($\hat{Y_{i}}$)의 구간에 더 관심을 가진다. 이 값의 불확실성은 아래의 원인에서 비롯된다.

  • 무엇이 적합한 예측변수인지, 그리고 계수가 얼마인지에 따른 불확실성
  • 개별 데이터 값에 존재하는 추가적인 오류

4. 회귀에서의 요인변수

 - 범주형 변수라고도 불리는 요인 변수(factor variable)는 개수가 제한된 이산값을 취한다. 회귀분석에서는 수치 입력이 필요하기 때문에, 모델에 사용할 수 있도록 요인변수를 다시 수치화해야 한다. 이를 위한 가장 일반적인 방법은 변수를 이진 가변수들의 집합으로 변환하는 것이다.

용어 의미
가변수(dummy variable) 회귀나 다른 모델에서 요인 데이터를 사용하기 위해 0과 1의 이진변수로 부호화한 변수
기준 부호화(reference coding) 통계학자들이 많이 사용하는 부호화 형태. 여기서 한 요인을 기준으로 하고 다른 요인들이 이 기준에 따라 비교할 수 있도록 한다.
원-핫 인코딩(one-hot encoding) 머신러닝 분야에서 많이 사용되는 부호화. 모든 요인 수준이 계속 유지된다. 어떤 머신러닝 알고리즘에는 유용한 반면, 다중선형회귀에는 적합하지 않다.
편차 부호화(deviation codin) 기준 수준좌는 반대로 전체 평균에 대해 각 수준을 비교하는 부호화 방법.

1) 가변수 표현

- 원-핫 인코딩

  PropertyType
1 Multiplex
2 Single Family
3 Single Family
4 Single Family
5 Single Family
6 Townhouse

위와 같이 PropertyType에 대한 6개의 데이터가 있다. 가능한 값은 Multiplex, Single Family, Townhouse 총 3가지가 있다. 이것을 원-한 인코딩을 이용해서 이진변수를 만들면, 아래의 표와 같다.

  Multiplex Single Family Townhouse
1 1 0 0
2 0 1 0
3 0 1 0
4 0 1 0
5 0 1 0
6 0 0 1

 

최근접 이웃 알고리즘이나 트리 모델 같은 머신러닝 알고리즘에서, 요인변수를 표현하는 데 원-핫 인코딩을 많이 사용한다.

 

- 회귀분석에는 일반적으로 절편을 포함하기 때문에 P개의 개별 수준을 갖는 요인변수는 보통 P-1개의 열을 갖는 행렬로 표시된다. 절편으로 인해 P-1개의 값을 정의하면 P번째 값을 알 수 있기 때문에 P번째 값까지 넣으면 중복성이 문제가 될 수 있으므로 P번째 열을 추가하면 다중공선성 오류가 발생할 수 있다.

2) 다수의 수준을 갖는 요인변수들

- 어떤 요인변수는 가능한 수준의 수가 많아, 많은 양의 이진 더미를 생성 할 수 있다. 이를 해결하기 위해서 다른 변수에 따라 요소들을 그룹으로 묶거나 초기 모델의 잔차를 사용하여 그룹을 만드는 방법을 사용한다.

 

- 회귀 적합화를 돕는 데 잔차를 사용한다는 개념은 모델링 프로세스의 기본 단계이다.

3) 순서가 있는 요인변수

- 일부 요인변수는 요인의 수준이 순서를 갖는다. 이것을 순서 요인변수(ordered factor variable) 또는 순서 범주형 변수(ordered categorical variable)라고 한다. 순서 요인변수는 일반적으로 숫자 값으로 변환하여 그대로 사용할  수 있다.

 

- 순서 요인변수를 수치형 변수로 달는 것은, 그냥 요인변수로 다루면 잃어버릴 수 있는 순서에 담긴 정보를 유지하기 위함이다.


< 참고자료 >
1. Peter Brucs & Andrew Brucs (2018), 데이터 과학을 위한 통계. 한빛미디어. 이용준 옮김.

5. t 검정

- t 검정은 윌리엄 고셋이 단일 표본평균의 분포를 근사화하기 위해 개발한 것으로, 두 집단 간의 평균의 차이가 유의미한지 검정하기 위해 사용하는 보편적인 검정 방법이다.

- R에서는 t.test를 이용하여 검정을 실시할 수 있다.

용어 의미
검정통계량(test statistic) 관심의 차이 또는 효과에 대한 측정 지표
t 통계량(t-statistic) 표준화된 형태의 검정통계량
t 분포(t-distribution) 관측된 t 통계량을 비교할 수 있는, (귀무가설에서 파생된) 기준 분포

 

6. 다중검정

용어 의미
제1종 오류(type I error) 어떤 효과가 통계적으로 유의미하다고 잘못된 결론을 내린다
거짓 발견 비율(false discovery rate; FDR) 다중검정에서 1종 오류가 발생하는 비율
p 값 조정(adjustment of p-value) 동일한 데이터에 대해 다중검정을 수행하는 경우에 필요하다
과대적합(overfitting) 잡음까지 피팅

- 다중성(다중 비교, 많은 변수, 많은 모델 등)은 일부가 우연히 유의미하다는 결론을 내릴 위험을 증가시킨다.

- 지도 학습에서는 이를 해결하기 위해, 홀드아웃 세트를 사용해서 잘못된 결과를 피할 수 있다.

 

7. 자유도

용어 의미
표본크기 n 해당 데이터에서 관측값의 갯수
d.f.(degree of freedom) 자유도

- 자유도는 표본 데이터에서 계산된 통계량에 적용되며 변화가 가능한 값들의 갯수를 나타낸다.

 

간단히 말하면 10개의 데이터로 이루어진 표본에서 평균과 9개의 값을 알고 있다면, 마지막 10번째 데이터를 자연히 알 수 있다. 이 나머지 한 개의 값을 제외한 9개의 값만 변화가 가능하다.

 

- 데이터 과학 분야에서는 데이터의 크기가 대개 충분히 크기 때문에, 분모가 $n$인지 $n-1$인지 데이터 과학자에게는 거의 차이가 없다. 하지만, 회귀에서 요인 변수를 사용할 경우는 다중공선성을 피하기 위해 중요하게 여겨져야 한다.

 

8. 분산분석

용어 의미
쌍별 비교(pariwise comparison) 여러 그룹 중 두 그룹 간의 (예를 들면 평균에 대한) 가설검정
총괄검정(omnibus test) 여러 그룹 평균들의 전체 분산에 관한 단일 가설검정
분산분해(decomposition of variance) 구성 요소 분리. 예를 들면 전체 평균, 처리 평균, 잔차 오차로부터 개발값들에 대한 기여를 뜻한다.
F 통계량(F-statistic) 그룹 평균 간의 차이가 랜덤 모델에서 예상되는 것보다 벗어나는 정도를 측정하는 표준화된 통계량
SS(sum of squares) 어떤 평균으로부터의 편차들의 제곱합

- 여러 그룹 간의 통계적으로 유의미한 차이를 검정하는 통계적 절차를 분산분석(analysis of variance) 줄여서 ANOVA라고 한다.

 

1) F 통계량

- F 통계량은 잔차 오차(residual error)로 인한 분산과 그룹 평균의 분산에 대한 비율을 기초로 한다.

- R의 aov 함수를 통해 ANOVA 테이블을 손쉽게 계산할 수 있다.

  Df(자유도) Sum Sq(제곱합) Mean Sq(평균제곱합) F value(F 통계량) Pr(>F)(p 값)
Data          
Residuals          

2) 이원 분산분석

- A-B-C-D 요소(그룹)과 더불어 두 번째 요소를 고려한 분석을 진행할 때 필요한 것이 이원 ANOVA이다. 이것은 '상호작용 효과'를 확인하는 식으로, 일원 ANOVA와 방식은 유사하다.

 

9. 카이제곱검정

용어 의미
카이제곱통계량(chi-square statistic) 기댓값으로부터 어떤 관찰값까지의 거리를 나타내는 측정치
기댓값(expectation, expected) 어떤 가정(보통 귀무가설)으로부터 데이터가 발생할 때, 그에 기대하는 정도
d.f.(degrees of freedom) 자유도

- 카이제곱검정(chi-square test)은 횟수 관련 데이터에 주로 사용되며 예상되는 분포에 얼마나 잘 맞는지를 검정한다.

- 카이제곱통계량은 일반적으로 변수 각 독립성에 대한 귀무가설이 타당한지를 평가하기 위해 $r$x$c$ 분할표를 함께 사용한다.

- 카이제곱 통계량($\chi^2$)은 피어슨 잔차들의 제곱합니다. 피어슨 잔차($R$)는 실제 횟수와 기대한 횟수 사이의 차이를 나타낸다.

$R=\frac{관측값-기댓값}{\sqrt{기댓값}}$

 

$\chi^2=\sum_i^r\sum_j^cR^2$

- R에서는 chisq.test 함수를 통해서 이 값을 계산할 수 있다.

 

- 카이제곱분포는 재표본 검정의 좋은 근사치를 제공하지만, 사건 발생 횟수가 매우 낮을 때(한 자리 숫자이거나, 특히 5개 이하인 경우)는 예외이다.

- 이를 위해 발생할 수 있는 모든 조합(순열)을 실제로 열거하고, 빈도를 집계하고, 관찰된 결과가 얼마나 극단적으로 발생할 수 있는지를 정확하게 결정하는 절차를 제공하는데 이를 피셔의 정확검정이라고 한다.

 

10. 멀티암드 밴딧 알고리즘

- 멀티암드 밴딧(multi-armed bandit; MAB) 알고리즘은 실험 설계에 대한 전통적인 통계적 접근 방식보다 명시적인 최적화와 좀 더 빠른 의사결정을 가능하게 하며, 여러 테스트, 특히 웹 테스트를 위해 이를 사용한다.

 

용어 의미
멀티암드 밴딧(mulit-armed bandit) 고객이 선택할 수 있는 손잡이가 여러 개인 가상의 슬롯머신을 말하며, 각 손잡이는 각기 다른 수익을 가져댜준다. 다중 처리 실험에 대한 비유라고 생각할 수 있다.
손잡이(arm) 실험에서 어떤 하나의 처리를 말한다.
상금(수익)(win) 슬롯머신으로 딴 상금에 대한 실험적 비유

- 엡실론-그리디 알고리즘(epsilon-greedy algorithm) : A/B 검정을 위한 간단한 알고리즘

1) 0부터 1 사이의 난수를 생성한다.

2) 이 숫자가 0과 엡실론(0과 1 사이의 값으로 일반적으로 아주 작다) 사이에 존재하면, 50/50의 확률로 동전 뒤집기를 실행한다.

2-a) 그 결과 동전이 앞면이면 제안 A를 표시한다.

2-b) 동전이 뒷면이면 제안 B를 표시한다.

3) 숫자가 엡실론보다 크면, 지금까지 가장 좋은 결과를 보인 제안을 표시한다.

 

- 엡실론이 1이라면 간단한 표준 A/B검정을 하게 되는 셈이다.

- 엡실론이 0이라면 완전한 탐욕 알고리즘(greedy algorithm)이 되어버린다.

-> 더 이상의 실험 없이, 피실험자들을 항상 지금까지 알려진 가장 좋은 제안에 할당한다.

 

* 밴딧 알고리즘은 3가지 이상의 처리를 효율적으로 다루고 '최고'를 위한 최적의 선택을 하도록 돕는다. 전통적인 통계 검정의 경우, 3가지 이상의 처리를 위한 의사 결정은 전통적인 A/B 검정의 의사 결정보다 훨씬 복잡하며, 이 경우 밴딧 알고리즘의 장점이 훨씬 커진다.

 

11. 검정력과 표본크기

용어 의미
효과크기(effect size) '클릭률의 20% 향상'과 같이 통계 검정을 통해 판단할 수 있는 효과의 최소 크기
검정력(power) 주어진 표본크기로 주어진 효과크기를 알아낼 확률
유의수준(significance level) 검증 시 사용할 통계 유의수준

- 검정력 계산의 주된 용도는 표본크기가 어느 정도 필요한가를 추정하는 것이다.

- 검정력 혹은 필요한 표본크기의 계산과 관련된 4가지의 중요한 요소들이 있다.

  • 표본크기
  • 탐지하고자 하는 효과크기
  • 가설검정을 위한 유의수준
  • 검정력

- 가장 일반적으로 표본크기를 알고 싶을 경우가 많다. 이때, 나머지 3가지 요소를 정해야 한다. 아래의 R 코드는 같은 크기의 두 표본을 고려한 검정을 위해 사용된다.

pwr.2p.test(h=... , n=..., sig.level=..., power=...)

 h=효과크기(비율), n=표본크기, sig.level=검정을 수행할 유의수준(알파),power=검정력(효과크기를 알아낼 확률)이다.

 


< 참고자료 >
1. Peter Brucs & Andrew Brucs (2018), 데이터 과학을 위한 통계. 한빛미디어. 이용준 옮김.

+ Recent posts