본문 바로가기

컴퓨터/디지털 하나로

예측적 데이터 분석

예측적 데이터 분석이란?

과거 데이터에서 설명변수와 목표변수 간의 관계를 수식화하여, 미래의 관측값을 예측하거나 대응하는 것이다.

 

전통 통계 (통계학 중심 분석)

대표적 기법: 회귀분석

접근 방식: 모집단에서 추출한 표본의 성격을 검정하며 분석을 수행

정규성 검정, 등분산성, 독립성 등 전제조건 확인

회귀계수의 유의성, 모델의 유의성까지 검정

이상치 제거, 결측치 처리와 같은 데이터 전처리가 필수이다.

 

데이터마이닝 (기계학습 중심 분석)

대표적 기법: 의사결정나무, 랜덤포레스트, 신경망 등

접근 방식: 학습 데이터를 이용해 모델을 학습하고, 검증 데이터에서 성능만으로 판단

전통적 통계의 전제조건은 고려하지 않음

전처리는 중요하지만 통계적 가정은 거의 사용하지 않음

 

전통 통계 회귀분석의 절차

1. 데이터 전처리

이상치, 결측값 제거

변수 간의 산점도 시각화 및 상관관계 확인

 

2. 회귀 모델 구성

최소제곱법을 활용하여 회귀 계수 추정

 

3. 모델의 적합성 평가

R² (결정계수): 전체 변동 중 모델이 설명하는 비율 (0~1)

Adj. R² (수정된 결정계수): 변수 수 고려한 R² 보정값

F-검정: 회귀식 자체의 유의성 확인

t-검정: 개별 회귀계수의 유의성 확인

 

import statsmodels.api as sm

# Y = aX + b 수식을 구성
X_const = sm.add_constant(X) # b값을 계산하기 위해 1로 구성된 데이터 추가
model = sm.OLS(Y, X_const)
result = model.fit()
result.summary() # 회귀 분석의 결과 도출

 

회귀 분석 결과

 

F-statistic & P-value: 모델 자체가 유의함을 의미 (P < 0.05)


coef: X가 1 증가할 때 Y가 1.3331 증가


const: 절편 -0.0503


Durbin-Watson: 회귀 모델의 오차항 간 자기상관성을 평가하는 검정

2 : 모든 잔차들이 독립적 / 현재의 회귀식으로 데이터들을 대부분 설명할 수 있다.

2< : 양의 자기상관성이 존재 / 인접한 잔차들이 비슷한 방향으로 움직이는 경향이 있다

2> : 음의 자기상관성이 존재 / 인접한 잔차들이 서로 반대방향으로 움직이는 경향이 있다

d = 0 : 매우 강한 양의 자기상관성이 존재

d = 4 : 매우 강한 음의 자기상관성이 존재

자기상관성이 존재한다 -> 잔차(오류)에 트랜드(경향성)이 존재한다 -> 사용자가 선택한 변수 외 다른 인자가 Y에 대해 영향을 주고 있음

 

Omnibus: 회귀 모델의 전반적인 유효성에 대한 검정

귀무가설 : 모든 회귀계수가 0이다. (모든 X들이 Y에 영향을 주지 않는다)
대립가설 : 모든 회귀계수가 0이 아니다. (일부 또는 모든 X들이 Y에 영향을 준다.)

 

JB test: 회귀 모델의 오차항이 정규분포를 따르는지 검정

귀무가설 : 오차 데이터가 정규분포를 따른다.
대립가설 : 오차 데이터가 정규분포를 따르지 않는다.


Skew: 잔차의 비대칭성 설명

0 : 정규분포처럼 좌우가 대칭인 분포
+ : 오른쪽으로 분포의 꼬리가 길다 (평균 > 중앙값)
- : 왼쪽으로 분포의 꼬리가 길다 (평균 < 중앙값)

 

Kurtosis: 잔차의 뾰족함 설명

0 (Mesokurtic): 정규분포와 유사한 형태의 모양
+ (Leptokurtic): 정규분포에 비해 더 두터운 꼬리
- (Platykrutic): 정규분포에 비해 더 넓은 꼬리

 

AIC / BIC: 모델 간 성능 비교에 사용 (낮을수록 우수)

Log-Likelihood: 모델이 데이터를 얼마나 잘 설명하는가

Covariance Type: 공분산의 계산 방식 (nonrobust는 이상치에 민감)

다중 회귀 분석

하나의 목표변수를 여러 개의 설명변수를 통해 예측하는 회귀분석

\[
Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_n X_n + \varepsilon
\]

 

다중공선성

여러 설명변수간에 강한 상관관계가 있을 때 발생하는 것으로 작은 데이터 변화에도 계수 값이 크게 변동하고, 유의하지 않은 변수도 유의한 것처럼 보이게 하여 회귀계수의 해석이 불안정해진다.

 

분산팽창지수(VIF: Variance Inflation Factor)

특정 독립변수가 다른 독립변수들과 얼마나 상관관계가 있는지를 수치로 나타낸 것.

VIF ≈ 1 → 다중공선성 거의 없음

VIF > 5 → 경고 신호, 제거 고려

VIF > 10 → 심각한 다중공선성

from statsmodels.stats.outliers_influence import variance_inflation_factor

data_VIF['X']  = X_const.columns 
data_VIF['VIF']= [variance_inflation_factor(X_const.values,x) for x in range(X_const.shape[1])]

 

변수 선택 방법

후진 제거법: 모든 변수를 포함한 뒤 하나씩 제거
전진 선택법: 가장 영향력 큰 변수부터 하나씩 추가
단계적 선택법: 위 두 가지를 혼합하여 반복적으로 추가 & 제거

 

from sklearn.linear_model import LinearRegression 
from sklearn.feature_selection import RFE

model = LinearRegression()
rfe_model = RFE(model, n_features_to_select=5).fit(X, Y) # 5개 남을 때 까지 제거
select_columns = X.columns[rfe_model.support_]

 

'컴퓨터 > 디지털 하나로' 카테고리의 다른 글

확증적 데이터 분석  (0) 2025.05.05
탐색적 데이터 분석(EDA)  (0) 2025.04.27
기술적 데이터 분석  (3) 2025.04.26
데이터 분석 기초 통계  (0) 2025.03.25