[AIFFEL] 22.Feb.10, Exploration - ARIMA_Time-series_Prediction

Deok Jong Moon·2022년 2월 10일
0
post-thumbnail

오늘의 주제

: 시계열 데이터를 이해해보자!

오늘의 학습 리스트

  • 시계열 데이터

    • 시간 순서대로 발생한 데이터의 수열
    • 수학적 정의 : Y={Y(sub)tY = \{Y(sub)t : tt 포함됨포함됨 T}T\}, wherewhere TT isis thethe indexindex setset
    • 꼭 일정 시간 간격이 아니어도 됨(그러면 좋지만)
  • 미래 예측은 불가능하지만, 가능하게 하려면..(Stationarity)

    • 아래의 두 가지 조건이 만족해야 함
    • 1) 과거의 데이터에 일정한 패턴이 발견된다.
    • 2) 과거의 패턴은 미래에도 동일하게 반복될 것이다.
    • 즉, 안정적(Stationary) 데이터에 대해서만 미래 예측이 가능하다

    • 여기서 안정적이란
      • 시계열 데이터의 통계적 특성이 변하지 않는다.
      • 즉, 시간에 변화가 있어도 그와 무관하게 존재하는 패턴이 있다.
      • 예를 들어, 매일 날씨가 변해도 연 단위에서 일정하다면 연 단위 데이터를 통해 내일의 날씨 예측해볼 수 있음
  • Stationarity

    • 시간을 x축, y를 다른 값으로 놨을 때, 어떤 패턴이 시간에 따라 변하면 그건 stationary한 게 아님
  • Covariance(공분산)

    • 그냥 내가 이해해본 걸 써보자(틀려도 됨)
    • 수식을 보니까...
    • 데이터의 각각 변수 값들을 각각의 평균에서 뺀다
    • 그리고 서로 곱해준다.
    • 그리고 그것들의 평균을 구한다.
    • 이러다 보니 상관관계가 반비례(?)일 때(X자 그래프)일 때는 (-)값과 (+)값이 계속 곱해져서 평균도 (-)가 된다
    • 그런데 비례, (/)모양일 때는 계속 (-) * (-) 혹은 (+) * (+)여서 값들이 (+)가 나온다.
    • 그래서 공분산이 음이면 X가 증가할 때 Y변수는 감소한다.
    • 반대로 양이면 X가 증가할 때 Y도 증가한다.
    • 그런데 0이면?
  • Autocovariance(자기 공분산)

    • 사실 본인의 분산 같이 되는데 왜 공분산을 꼭 붙이는가?
    • 왜냐하면 진짜 본인과 비교하는 게 아니라 X라면, X+h와 비교하는 것이어서(h는 특정 time step)
    • 이것이 일정한 분산으로 계속 나온다는 것은 데이터가 시간에 대해 stationary하다는 전제가 있어야 하는 것!
  • 시계열 데이터는 결국 평균, 분산, 공분산이 일정해야 하는 건데

    • 평균은 그래프에서 데이터 값 자체, 즉 y축 높이가 바뀌는지이고,
    • 분산은 y축 패턴의 폭이 시간에 따라 변하는지 이고,
    • 공분산은 x축 패턴의 폭이 시간이 지나도 일정한지로 보면 되는 것 같다.
  • 이동평균(Moving Average)

    • 부분집합들의 평균을 sliding하면서 나타내는 건데
    • 이러면 일정 구간 내의 경향이 보임
    • 그리고 이 부분집합들의 평균이 그래프에 그려졌을 때는, 하나씩 봤을 때 튀는 값들이 경향 그래프에 나타내는 영향을 희석시킨다.
  • 이 이동평균의 window size에 따라 이동평균의 그래프의 완만함이 달라지는데, 결국 이것을 빼주게 되므로 window size를 어떤 숫자로 결정하는 지는 굉장히 중요하다.

  • Null hypothesis

    • 괜히 Null이라 불리는 게 아닌 것 같다.
    • 주로 '차이가 없다'라는 식의 귀무 가설
    • 그리고 이걸 p-value를 통해 확인하는데,
    • p-value가 낮다 함은 '이게 나올 확률이 적은데 이렇게 나오네...? 그럼 이거 사실 나올 확률이 높은 가보다. 두 집단에 차이가 있나 보다.'라는 식
  • 단위근

    • 어떤 식이 있는데, 그 식의 x=1, y=1이라는 해가 있으면 그 식에 대한 타임시리즈 데이터는 stationary하지 않단다.
    • 그리고 그 수만큼 differencing operation이 필요할 거란다.
  • matplotlib.pylab.rcParams

    • matplotlib에서는 scripting layer(예 : pylot)과 artist layer, 그리고 backend layer가 하는 게 다른데,
    • 결론적으로 pyplot이 지시하면 Artist는 뭘 하고, Backend는 뭘해서 그래프를 그리는 것이다.
    • 그런데 이 때 그리는 것의 전반에 대한 기본적인 속성을 바꿔주고 싶을 때 rcParams라는 딕셔너리에 있는 해당 key의 value를 바꿔주면 되나 보다.
  • plt.plot()도 객체가 생성돼서 저장할 수 있다...

    • 당연한 거였는데 이제 알았다...
    • variable = plt.plot() 하면 나중에 그 변수명만 치면 그래프가 나온다
  • 가설의 정의

    • "가설(hypothesis)란 확률 분포에 대한 어떠한 주장"... 이거 좋은 말인 것 같다.
    • 아마 통계학에서의 가설을 말하는 듯
  • 차분

    • 1차, 2차 등등 있는데, 결국
    • 차분한 거에 차분한 거 또 하면 2차인 듯하다.
    • 의미는 계절성을 파악할 수 있다는 것.
    • 뭐냐면, 분산을 맞춰주고 이동 평균을 빼서 평균을 낮춰줘도
    • 그 안에는 계절성(seasonality)이 포함되어 있을 텐데,
    • 이 계절성은 패턴이 파악되지 않는 주기적인 변화이다.
    • 그래서 shift한 값을 빼줌으로서 하루하루(?)의 변화량을 구하는데 이것이 차분
    • 즉, 1차 차분한 값은 하루하루(?)의 변화량.
    • 이러면 계절성이 끼어 있던 데이터 간 값 폭이 줄어드는 것 같다.
  • seasonla_decompose(times series data)

더 공부할 것

  • 통계 관련, 혹은 다른 측면에서 부족한 것들이 점점 보인다.
  • 기댓값, 분산 등을 구하는 공식...?
  • ARIMA....
    • AR
    • MA
    • ACF
    • PACF
    • 전부 다 모르겄다.... 차근차근 봐보자...

덕분에 오늘 미니프로젝트인 주식 예측은 아예 손도 못댔다...
그래도 오늘은 좋은날 :)

profile
'어떻게든 자야겠어'라는 저 아이를 닮고 싶습니다

0개의 댓글