프로그래밍

[R] 예측 오차를 통한 예측 모델 성능 평가

RainIron 2021. 6. 2. 23:37
반응형

1. 예측 오차의 개념

1) 오차와 예측 오차

* 정의

  - 오차(Error): 실제값과 예측값의 차이의 정도

  - 예측 오차(Prediction Error): 예측 분석 시 발생하는 예측값과 실제값의 차이

 

* 예측오차 발생시 통계적 문제점

  (예)

  - 원인1: 시계열의 집계수준(월, 주 등)이 예측 데이터에 비해 지나치게 세밀하거나 간격이 클 경우(데이터가 너무 많거나 적을 오류 발생)

  - 원인2: 매출 데이터의 기초 수준이 월이지만 주별로 집계할 경우(Null이 너무 많음)

 

* 오류와 해결 방법

오류 메시지 해결 방법 제안
"뷰의 날짜 필드에서 연속형 날자를 파생할 수 없습니다." - 예측하려면 날자 필드를 연속적으로 해석할 수 있어야 함
- 날자 필드가 명시적으로 연속하지 않는 경우 날짜 수준에 연도가 포함되어 있어야 함
- 뷰에 날자가 없거나, 뷰의 날짜가 전체 계층을 구성하지 않거나(예: 날짜에 연도와 일은 포함되지만 월이 포함되지 않는 경우), 지원되지 않는 계층을 구성하는 경우(예: 연도, 주, 일)에 발생함
"시계열이 너무 작아서 예측할 수 없습니다." - 더 많은 날짜 값을 포함하도록 뷰의 시계열을 확장함
- 신뢰할 수 없거나 부분적으로 잘린 기간을 잘라낸 후 데이터 요소가 4개 미만이 되어 예측할 수 없는 경우에 발생함
"Null 날짜 값을 가진 시계열에 대한 예측을 계산할 수 없습니다." 날짜 필드를 필터링하거나 낮은 날짜 수준을 사용하여 뷰의 날짜 필드에서 널 값을 제거함
"뷰에 고유한 날짜 필드가 여러 개 포함되어 있는 경우 예측을 계산할 수 없습니다." 뷰에 날짜 필드가 여러 개인 경우 이 오류가 반환됨
"예측 옵션에서 선택한 '집계 기준'값이 시각화와 호환되지 않습니다." - 뷰의 날짜는 예측 옵션 대화 상자의 집계 기준 값과 호환되어야 함(예: 집계 기준을 주로 설정하고 뷰의 날짜를 월로 설정한 경우 이 오류가 발생)
- 두 값이 호환되도록 날짜 중 하나를 변경하거나 집계 기준을 자동으로 설정함
"누락된 값이 너무 많아서 예측을 계산할 수 없습니다." - 데이터의 40% 초과해서 누락된 경우에 발생함
- 예측 옵션 대화 상자에서 누락된 값을 0으로 채우기를 선택해도 이 오류는 해결되지 않음
- 원본 데이터를 수정하거나 다른 원본의 데이터를 사용해야 함
"예측할 측정값이 없습니다." - 예측할 수 있는 측정값이 뷰에 없는 경우에 발생함
- 예측 측정값이 행 또는 열 선반이나 마크 카드에 있어야 함
"예측할 측정값은 숫자여야 합니다." 일부 측정값이 숫자로 해석될 수 없으므로 예측할 수 없음
"차원에 대한 예측을 계산할 수 없습니다." 예측할 값은 차원이 아닌 측정값이어야 함
"데이터가 너무 많아서 예측을 계산할 수 없습니다." - 쿼리의 결과 집합이 지나치게 큰 경우 예측이 불가능
- 이 제한은 약 10000개 행
- 예측을 수정하려면 시계열 값을 더 상위 수준에서 집계하거나, 데이터를 필터링함
"데이터가 너무 많은 행, 열 또는 색상으로 나눠지므로 예측을 계산할 수 없습니다." 일부 차원을 필터링하거나 제거하여 뷰를 단순화하면 오류가 해결됨
"뷰에 테이블 계산이 포함되어 있으므로 예측을 계산할 수 없습니다." 테이블 계산이 포함되지 않은 뷰 버전을 만듬
"필터 선반에 측정값이 있으므로 예측을 계산할 수 없습니다." 측정값을 필터 선반에서 제거함
"측정값 집계를 선택하지 않았으므로 예측을 계산할 수 없습니다." 측정값 집계 옵션은 분석 메뉴에 있음
"뷰에 비율 계산이 포함되어 있으므로 예측을 계산할 수 없습니다." 비율 옵션은 분석 메뉴에 있음
"측정할 측정값에 0보다 작거나 같은 값이 하나 있는 경우에는 승법 모델을 계산할 수 없습니다." - 추세 또는 계절적 변동이 승법으로 설정된 사용자 지정 모델을 만듬
- 이 값을 변경하거나 예측 모델을 자동으로 설정해야 함
"승법 추세 및 가법 계절이 있는 모델은 수치적으로 불안정한 결과가 발생하므로 허용되지 않습니다." - 오류 메시지에 설명된 대로 구성된 사용자 지정 모델을 만듬
- 사용자 지정 모델에 대한 설정을 변경하거나 예측 모델을 자동으로 설정함
"시계열이 너무 짧아 계절 모델을 계산할 수 없습니다." 더 많은 날짜 값을 포함하도록 뷰의 시계열을 확장함

 

2. 예측 모델 종류별 적합도 평가 방법

1) 예측 기법과 예측 모델

* 예측 기법: 독립변수와 종속변수 사이의 관계를 찾아 종속변수의 값을 예측하는 모형을 만드는 데이터 분석방법

* 예측 모델: 예측 기법을 사용하여 생성된 종속변수 값을 예측하는 값을 찾기 위한 함수식

 

2) 예측 모델의 종류

* 회귀 분석: 독립변수가 종속변수에 영향을 미치는지 검증하는 분석 방법

* 의사결정 나무: 목표와 상황과의 상호관련성을 나타내어 해당 상호관련성을 규칙화하고, 나무 구조로 도표화하여 분류와 예측을 수행하는 분석 방법

* 신경망 기법: 인간의 뇌 신경망(시냅스 결합)을 본떠 만든 알고리즘을 사용한 예측 기법

* 사례 기반 추론: 과거 사례들의 결과를 기반으로 새로운 사례의 결과를 예측하는 기법

 

3) 예측 오차를 통한 모델 적합도 평가 방법

* 회귀 모델 => 모델의 잔차검정

  - 잔차: 모델에 의해 추정된 종속변수의 값과 실제 관찰된 종속변수 값과의 차이

    (예측값과 실제값의 차이)

  - 등분산성: 기울기가 0에 가갑고, 산점도를 그렸을 때, 데이터 점들이 패턴없이 무작위 분포를 나타내야 함

  - 정규성: 잔차가 정규분포를 따르는지 확인함

  - 독립성

    # 자기 상관검정(Durbin-Watson 검정) 

Durbin-Watson 통계량 결과
0에 가까울수록 양의 자기상관이 있음 회귀모형 부적합
2에 가까울수록 자기상관이 거의 없음 회귀식에 잔차가 존재하지 않음
4에 가까울수록 음의 자기상관이 있음 부적합

* 분류 모델

  => 교차 유효성 검증

  => 혼동 행렬(Confusion Matrix)

  => ROC곡선(Receiver Operating Characteristic Curve)

 

4) 회귀 모델의 적합도 지수

* 회귀 모델의 적합도 평가에는 대표적으로 사용되는 잔차 검정 외에 R^2(결정계수), F검정통계량, T검정통계량이 판단 기준으로 상용됨

  - R^2 결정계수: 설명력의 지표

    -> 추정된 회귀모형이 데이터를 얼마나 잘 설명하도록 추정되었는지를 나타냄

    -> 결정계수가 1에 가까울수록 설명력이 좋다고 판단

    -> 결정계수가 0에 가까울수록 설명력이 낮다고 판단

  - F검정통계량: 모형의 유의성 지표

    -> 회귀 모형의 통계적 유의성을 검정하기 위한 검정통계량

  - T검정통계량: 회귀 계수의 유의성 지표

 

3. R을 이용한 예측 모델 성능 평가

* R제공 데이터 cars 사용

head(cars, 3)

* lm 함수 이용, 회귀 모델 생성

a = lm(dist~speed, cars)

=> 추정된 회귀식: -17.579 + 3.932*speed + e

 

* 회귀계수, 예측값, 잔차, 회귀계수 신뢰구간, 잔차제곱합 계산

- 회귀계수: coef()

- 예측값: fitted()

- 잔차: residuals()

- 회귀계수 신뢰구간: confint()

- 잔차제곱합: deviance()

# 회귀계수
coef(a)

# 예측값 계산
fitted(a)[1:4]

# 잔차 계산
residuals(a)[1:4]

# 회귀계수 신뢰구간 계산
confint(a)

# 잔차 제곱합 계산
deviance(a)

* predict 함수 사용, x = 4일때 예측값 구하기

predict(a, newdata = data.frame(speed=4))

* 예측값의 신뢰구간 구하기

predict(a, newdata = data.frame(speed=4), interval = 'confidence')


* 오차항 고려한 예측값의 신뢰구간

predict(a, newdata = data.frame(speed=4), interval = 'prediction')

* 회귀모형 평가

summary(a)

R^2 결정계수: 0.6511

* 잔차의 등분산성 검정: 출력창 2*2 분할

  - 기울기가 0인 직선일수록 등분산성 검정에서 이상적
  - 패턴없이 무작위 분포를 보일수록 좋은 적합

par(mfrow=c(2, 2))
plot(a)

(1) Residuals vs Fitted Graph
- X축: 선형회귀로 예측된 값
- Y축: 잔차
- 선형 회귀(오차: 평균 0, 분산: 정규분포)로 가정하였으므로 기울기 0인 직선이 관측되는 것이 이상적


(2) Normal Q-Q Graph
- 잔차가 정규 분포를 따르는지 확인하기 위한 Q-Q도


(3) Scale-Location Graph
- X축: 선형회귀로 예측된 값
- Y축: 표준화 잔차
- 기울기 0인 직선이 이상적


(4) Residuals vs Leverage
- X축: Leverage
- Y축: 표준화 잔차
- Leverage: 설명 변수가 얼마나 극단에 치우쳐 있는지를 의미
- 이상치가 나타나지 않는 것이 이상적

* 잔차의 정규성 검정: 잔차 추출

res = residuals(a)

# 샤피로 윌크 정규성 검정
shapiro.test(res)

=> p-value > 0.05: 정규성을 따름
=> p-value < 0.05: 정규성을 따르지 않음

p-value가 0.05보다 작기 때문에 정규성을 따르지 않음

* 잔차의 독립성 검정(Durbin-Watson)

library(lmtest)

dwtest(a)

- 시점이 다른 오차들 사이에 상관성이 없음 -> 자기상관을 가지지 않는다.

==> (dw = 1.6762) : 2에 가까우므로, 자기상관이 거의 없다. => 회귀분석을 실시할 수 있다.

반응형