일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 적대적 생성 신경망
- RPN
- 이미지 초해상화
- 비지도학습
- Clustering
- GAN
- SRGAN
- Deep Learning
- Object Detection
- hierarchical clustering
- CV
- 군집화
- Faster R-CNN
- Region Proposal Networks
- 군집
- super-resolution
- K-means
- Fast R-CNN
- Today
- Total
수혁지능
[Practical Statistics for Data Scientists] Prediction & Factor Variables in Regression 본문
[Practical Statistics for Data Scientists] Prediction & Factor Variables in Regression
혁수 2023. 1. 3. 01:44이 글은 데이터 과학을 위한 통계(앤드루 브루스)를 참고했음을 미리 밝힙니다.
회귀의 목적
전통 통계학: for 설명을 위한 모델링
데이터 과학: for 예측
외삽(데이터 범위 초과)의 위험
회귀분석은 충분한 데이터 값이 있는 예측변수(독립변수)에 대해서만 유효하다
>> 데이터 범위를 초과하면서까지 모델을 확장하면 안된다!
신뢰구간과 예측구간
신뢰구간: 회귀계수 주변의 불확실성 정량화 / 여러 값에서 계산된 평균이나 다른 통계량과 관련.
예측구간: 개별 예측값의 불확실성 정량화/ 하나의 값에 대한 불확실성
<회귀 파라미터(계수)의 신뢰구간을 생성하기 위한 부트스트랩 알고리즘>
(P개의 예측변수(X)와 n개의 레코드가 있는 데이터)
- 각 행(결과변수 Y 포함)을 하나의 티켓으로 생각하고 개수가 모두 N개인 티켓 박스에 넣었다고 가정
- 무작위로 티켓 뽑아 값을 기록하고 다시 박스에 넣는다(복원 추출의 개념)
- 2번 과정을 N번 반복해 부트스트랩 재표본을 한 개 생성
- 만들어진 부트스트랩 표본을 가지고 회귀모형 생성. 추정된 계수 기록
- 2~4번 과정 1000번 반복
- 각 계수에 대해 1000개의 부트스트랩 값 갖게 되고, 각각에 대해 적합한 백분위 수 구함(ex) 90% 신뢰구간을 위해 5번째에서 95번쨰 백분위 수를 구한다)
But, 데이터 과학자들은 회귀계수가 얼마인지에 대한 관심만 있지, 개념적 의미와 해석에는 관심이 없다.
그들은 예측된 y값의 구간에 대해 더 큰 관심이 있다.
예측값에 불확실성이 발생하는 이유!
- 무엇이 적합한 예측변수(X)인지, 회귀계수가 얼마인지에 따른 불확실성(위의 부트스트랩 알고리즘 참고)
- 개별 데이터 값에 존재하는 추가적인 오류
<회귀 모형에 따른 오차(회귀계수 불확실성) + 개별 데이터 값의 오차 모두 고려한 부트스트랩 알고리즘>
- 데이터로부터 부트스트랩 표본 뽑는다(위의 부트스트랩 알고리즘 참고)
- 회귀모형 찾고 새로운 값 예측
- 원래의 회귀 적합도에서 임의로 하나의 잔차를 취하여 예측값에 더하고 그 결과 기록 (Y = Y^hat + 잔차)
- 1~3단계 1000번 반복
- 결과의 2.5번째 백분위 수와 97.5번쨰 백분위 수를 찾기(95% 예측구간 찾기)
결론적으로 예측구간은 일반적으로 같은 값에 대해 신뢰구간보다 훨씬 넓다(잔차의 분산이라는 Uncertainty가 추가됨)
예측구간을 사용해야 하는데 신뢰구간을 사용하면 주어진 예측값의 불확실성이 지나치게 낮게 나올 수 있다!!
회귀에서의 요인변수
범주형 변수 = 요인변수 = 개수가 제한된 이산값을 취한다
지표변수 = 이진변수(예 / 아니요) = 요인변수의 특수한 경우
회귀에서 요인변수를 그대로 사용할 수 없는 이유: 회귀분석에서 회귀식은 수치 입력이 필요, 모델에 그대로 사용 불가능
>> 요인변수 다시 수치화 해야함, 가장 일반적인 방법: 이진 가변수들의 집합으로 변환
원-핫 인코딩(one-hot encoding)
요인변수가 가지는 수준의 개수만큼 열을 만들어 해당되는 요인은 True(1), 나머지 요인은 False(0)으로 표현하는 기법
파이썬에서는 get_dummies를 사용하여 범주형 변수를 더미로 변환할 수 있다.
속성으로 drop_first = True를 사용하면 P개의 개별 수준을 갖는 요인변수가 P-1개의 열을 갖는 행렬로 표시(첫번째 요소 제외)
>> 다중공선성 문제(독립변수간 강한 상관관계 발생: 회귀분석의 전제 가정 위배)를 피할 수 있다!!
>> 직관적으로 보면, P-1개의 열만 표시해도 그 값이 모두 0이면 자연스럽게 빠진 1개의 열이 1임을 알 수 있다
>> 회귀모형에서는 일반적으로 절편이 포함되기 때문에 P-1개의 이진변수의 값을 정의하면 P번째 값을 알 수 있다.(자유도의 개념과 유사)
P번째 열을 추가하면 중복성 발생해 다중공선성 오류 발생가능
다수의 수준을 갖는 요인변수들
요인변수의 수준의 수가 많을 때는 모든 요소를 유지할지, 수준을 통합하는 것이 나을지 결정해야 함.
다른 요인변수에 따라 수준을 그룹으로 묶을 수도 있고, 초기 모델의 잔차를 활용(ex) 각 수준에 대한 잔차의 중간값 계산해 정렬 후 그룹 분류)해 수준을 그룹으로 묶을 수 있다.
순서가 있는 요인변수
순서 요인변수 = 순서 범주형 변수 = 요인의 수준이 순서를 갖는 경우
>> 일반적으로 숫자 값으로 변환하여 그대로 사용 가능
>> 그냥 요인변수로 다루면 잃어버릴 수 있는 정보를 수치형으로 변환하면 유지 가능