시계열 자료
- 시간의 흐름에 따라 관찰 기록된 값
- 예측 모델에서 시간을 변수로 사용하는 특징
시계열 모형
1) 자기회귀 모형 (AR 모형)

- 과거와 현재의 자신의 관계를 정의의한 것
- p 시점 전의 자료가 현재 자료에 영향을 주는 모형
- 이전 관측값(과거)이 이후 관측값(현재)에 영향을 주는 원리를 사용
2) 이동평균 모형(MA모형)

- 과거와 현재 자신의 오차와의 관계를 정의
- 각 시점별로 가중치가 다름
3) 자기회귀누적이동평균 모형 (ARIMA(p,d,q) 모형)
- ARIMA 모형은 비정상시계열 모형임
- ARIMA 모형을 차분이나 변환을 통해 AR 모형이나, MA 모형 이둘을 합치 ARMA 모형으로 정상화 할 수 있음
- 현재와 추세간의 관계를 정의
⇒ 회귀라 정규성을 만족해야 의미를 가진다고 여김
- 모든 시점에 대해 분석 필요한게 시계열 분석 → 일반화에 어긋남
데이터에 대한 평균식이 의미를 가지려면 → 정상성(정규분포와 비슷한 모양)
- 연속되는 숫자들의 평균이 시간에 일정해야 함
- 연속되는 숫자들의 분산(variance)가 시간에 일정해야 함
- 연속되는 숫자들의 공분산(covariance)는 시간에 일정해야 함

- 초록색: 정상 시계열(stationary)
- → 평균이 일정하고 변동도 안정적이라, “전체 평균” 같은 대표값이 의미 있다.
- 빨간색: 비정상 시계열(non-stationary)⇒ 전체 기간의 평균을 하나로 계산해도 어느 시점에는 맞고, 어느 시점에는 틀려서
- 우리가 고른 평균식 자체가 의미가 없어짐.
- → 평균/분산/상관 구조가 시간에 따라 변한다.
- 평균이 변하는 비정상 추세에 있을 때는 ⇒ 차분(difference)을 통해 정상화
- 차분은 현시점 자료에서 전시점 자료를 빼는 것임
- 분산이 일정하지 않은 경우 → 변환(transformation)을 통해 정상화
- 로그변환 : 큰 값의 변동을 눌러주고 작은 값의 변동을 상대적으로 키워 분산 안정화 효과
- 제곱근 변화
시계열 분해법 → 지수 평활법
(모든 시계열 자료를 사용하여 평균을 구하며 시간의 흐름에 따라 최근 시계열에 더 많은 가중치를 부여하여 미래를 예측 )
정상성
- 시계열분석(AR / MA / ARMA/ARIMA)에서 가장 중요함
- 시간이 흘러도 시계열의 통계적 성질(평균, 분산, 공분산)이 변하지 않는 상태
- 평균이 일정
- 변동(분산)이 일정
- 상관 구조(공분산)가 일정
- 정상성 모델
- AR(p) : 현재 값이 과거 값들의 영향을 받음
- MA(q) : 현재 값이 과거 오차(충격)의 영향을 받음
- ARMA(p,q) : AR + MA 합친 모델
- 비정상 시계열
- 차분(d)을 포함한 ARIMA(p,d,q)로 모델링
- d=0이면 정상 → ARMA
- d≥1이면 비정상 → 차분 포함 ARIMA
kings_ts 는 리스트가 아니라 시계열
kings_ts <- ts(kings)
ACF/PACF가 의미하는 것
- ACF (자기상관함수)
- 현재 값 Xt 와 과거 값 Xt−k 의 상관관계
- “지금 값이 과거 몇 시점의 값과 얼마나 비슷한가?”
- ACF는 MA 차수(q) 를 추정할 때 힌트가 된다.
- PACF (부분자기상관함수)
- 중간 lag 영향을 제거하고 순수한 lag k의 영향만 본 상관
- PACF는 AR 차수(p) 를 추정할 때 힌트가 된다.
코드
# 1. 라이브러리 로드 (설치되어 있지 않다면 install.packages("forecast") 실행)
library(forecast)
# 2. 데이터 준비
kings <- c(60, 43, 67, 50, 56, 42, 50, 65, 68, 43, 65, 34, 47, 48, 41, 26, 65, 36, 64, 39,
57, 58, 70, 67, 53, 67, 71, 55, 66, 91, 72, 59, 67, 81, 67, 76, 77, 81, 62, 70, 81, 80)
kings_ts <- ts(kings) #벡터를 시계열 객체로 변환
# 3. 데이터 탐색 및 시각화 (ACF, PACF)
# ACF와 PACF 그래프를 통해 AR(p)와 MA(q)의 차수를 결정합니다.
par(mfrow=c(2,2)) # 2x2 레이아웃 ( 한 화면에 4칸의 그래프)
#---------------------------------------------------
# (1) 원본 데이터 시계열 그래프
# 시간 순서에 따른 값의 변화 확인
#---------------------------------------------------
plot.ts(kings_ts, main="영국 국왕들의 사망 시 나이", ylab="나이", xlab="순서", col="darkblue", lwd=2)
#---------------------------------------------------
# (2) ACF (자기상관함수) - MA 모델의 차수 결정에 활용
# lag=1,2,3,…에서 현재 값과 과거 값의 상관을 보여줌
# MA(q) 모델은 ACF가 q 이후에 절단(cutoff)되는 경향이 힌트가 될 수 있음
#---------------------------------------------------
acf(kings_ts, main="ACF (MA 차수 확인)")
#---------------------------------------------------
# (3) PACF (부분자기상관함수) - AR 모델의 차수 결정에 활용
# 중간 lag 영향 제거 후 순수하게 lag k의 영향만 본 상관
#---------------------------------------------------
pacf(kings_ts, main="PACF (AR 차수 확인)")
#---------------------------------------------------
# 4. 모델 구축
# AR(p) 모델: PACF가 1차 이후 절단되는 경향이 있으므로 AR(1) 시도
# MA(q) 모델: ACF를 참고하여 MA(1) 시도 (일반적으로 MR은 MA를 의미함)
#---------------------------------------------------
# AR(1) 모델 생성
#order=c(p,d,q)에서 p=1 (AR 1차) / d=0 (차분 없음) / q=0 (MA 없음)
#“현재 값이 바로 이전 값(1시점 전)의 영향을 받는다”
kings_ar <- arima(kings_ts, order=c(1,0,0))
print("--- AR(1) Model Summary ---")
print(kings_ar)
# MA(1) 모델 생성 (일반적으로 시계열에서 MA를 사용)
# “현재 값이 직전(1시점 전)의 오차(충격) 영향을 받는다”
kings_ma <- arima(kings_ts, order=c(0,0,1))
print("--- MA(1) Model Summary ---")
print(kings_ma)
#---------------------------------------------------
# 5. 모델 예측 및 그래프 작성
#forecast(kings_ar, h=5) : AR(1) 모델로 앞으로 5개 시점 예측
#예측값뿐 아니라 보통 예측구간(신뢰구간) 도 같이 계산됨
#---------------------------------------------------
par(mfrow=c(1,1))
plot(forecast(kings_ar, h=5), main="AR(1) 모델 예측 (향후 5인)")
lines(kings_ts, col="black")
#---------------------------------------------------
# 6. (참고) 자동 ARIMA 모델링
# auto.arima()는 가장 적합한 p, d, q 수치를 자동으로 찾아줍니다.
#---------------------------------------------------
auto_model <- auto.arima(kings_ts)
print("--- Auto ARIMA Best Model ---")
summary(auto_model)
# 최종 결과 시각화
plot(forecast(auto_model, h=8), main="최적 ARIMA 모델 예측 결과",
xlab="국왕 순서", ylab="나이", shadow=TRUE)
PACF(AR차수 확인)

- 유의 수준 안에 들어오지 않은 막대 그래프 (래그 4지점) → 5지점에서는 극단적으로 뚝 떨어짐
- ⇒절단현상
- 과거 데이터가 언제까지 영향을 미치는지 확인 하고 싶으면 보면 된다
- 래그가 5인 지점에서 상관지수가 뚝 떨어짐 ⇒ 4지점까지만 보면 됨

- (4, 0, 0) = p(AR 4차),d(차분 없음),q(MA 없음)
- AR(4)= ARIMA(4,0,0)ahepf
- 이 변량이 없을 떄의 오차가 일반적인 편차 범위 안에 드는지 안드는지를 봄 평균적 오차
- t-value는 극단적으로 작으면 끝으로 갈수록 ⇒ =-2를 기준으로 / 자유도없어서 그닥 의미 없음
- log likelihood는 높을 수록 좋은 거

평균적인 오차에 비해서 오차를 줄여 → 설명력이 높다

사망 나이를 70세 전 후로 본다
순서 정보가 누락되면 학습 불가 → 포지션 정보, 시퀀스 정보, 날짜 정보 등을 추가적으로 가지고 있을 수 있도록 ⇒
주성분 분석 (Principal component analysis) = PCA
기술추론통계학 자료 p.202

차원 축소 (이때 차원은 feature = 변량)
고유벡터 : 고유한 특성은 변하지 않는다⇒ 가지고 있는 방향성은 바뀌지 않는다
주성분 분석 : y 값이 없다
- 평균이 일정하고
- 변동(분산)이 일정하고
- 상관 구조(공분산)가 일정해야 한다.
방법론
- 다수의 변수들이 가지고 있는 전체 변동을 잘 설명할 수 있는 중요한 몇 개의 변수(주성분)들을 새롭게 생성해서 원래의 데이터를 적은 수의 새로운 변수로 요약하는 기법
- 원 데이터가 가지고 있는 복잡한 여러 개의 변수에서 서로 상관관계가 없는 소수의 주성분으로 데이터의 속성을 줄여나간다.
평균에 가까운 아이들은 개인 차가 나타나지 얺우으므로 그 변량을 가지고 새로운 벡터를 만드는 건 의미가 없다
평균이 아니라 각자의 특징대로 만들면 -⇒ 분산값이 크다
변량 모두 조합해서 새로운 벡터 하나 만들려고
분산 값이 큰 부분에는 가중치 크게? 평범한 필드에는 낮은 가중치
⇒ 이걸 합쳐서 새로운 벡터 하나 만듦 = 주성분 벡터
←→ 회귀 w는 실측치와 예측치의 차이가 최소가 되는걸 목표로

뽑아내는 t 값의 차이가 커야 ⇒
분산을 크게 주려면
- 조금만 달라도 큰 가중치 ex) 바퀴 변량


- 새로운 벡터들을 줄여서 학습할 때 사용
- PCA1 일 때 0.6 → PCA2일 때 0.8이면 → PCA3…. 1 ?
- 차원 축소 뿐 아니라 과적합도 예방 가능
# 1. 데이터 생성
scores <- data.frame(
국어 = c(95, 88, 60, 55, 90, 70, 65, 50, 85, 78),
영어 = c(92, 85, 65, 50, 95, 75, 60, 55, 80, 82),
수학 = c(55, 60, 95, 88, 60, 85, 90, 92, 50, 75),
과학 = c(60, 65, 90, 92, 55, 80, 95, 85, 65, 70)
)
str(scores)
summary(scores)
# 데이터 확인
head(scores)
# 2. PCA 실행 (scale = TRUE를 통해 표준화 수행)
pca_result <- prcomp(scores, scale = TRUE)
# 결과 요약 보기
summary(pca_result)
# 3. Biplot 시각화
biplot(pca_result, main = "학생 성적 PCA Biplot", cex = 0.8)
abline(h = 0, v = 0, lty = 2)


'LG DX DATA SCHOOL' 카테고리의 다른 글
| 01/26 DBSCAN (0) | 2026.01.27 |
|---|---|
| 0123 군집분석 (0) | 2026.01.23 |
| 01/20 (1) | 2026.01.21 |
| 01/19 결정트리부터 ... (1) | 2026.01.19 |
| 01/16 사이킷런으로 시작하는 머신러닝 (0) | 2026.01.16 |