지난번에 작업한 데이터를 다시 한번 보죠
지금 하려고 하는 것은 주식시장에 나오는 주가변화의 며칠 이동평균선이라는 것을 하려고 합니다. 사실 이동평균(ma: moving average)선이라는 용어는 이론적으로 안 맞는 용어이고, 수식모양으로 보면 자기회귀(AR: Auto regressive)가 더 맞는 표현 같은데 하여간 딱 맞는 표현은 없는 것 같습니다.
예들 들어 2일 평균(p=2)라고 하고 주가가 y<-(100, 150, 200, 300) 이라 하면 2일 이동평균은 w는
w[1]<-100*1/2+150*1/2
w[2]<-150*1/2+200*1/2
w[3]<-200*1/2+300*1/2
이렇게 됩니다. 3일 평균, 즉 p=3이면 1/2을 곱하는 것이 아니라 1/3을 곱하면 됩니다.
위 데이터를 5일 평균(p=5), 20일 평균(p=20), 100일 평균(p=100)을 구해 그래프를 그려 보겠습니다.
p=5;
p=20;
p=100;
위와 같이 p를 크게 할수록 높은 주파수가 점점 더 많이 제거하고 낮은 주파수 함수만 남게 됩니다. 이런 걸 공학에서 Lowpass filtering 이라 합니다. 낮은 주파수만 내보낸다는 것이죠.
위 작업을 한 S와 R 코드를 한번 보죠. S에 ar이라는 함수가 이미 있는데 이건 통계학의 시계열 분석시 AR 모형 추정하는 것이라서 여기서 쓸 수 없습니다. 제가 제가 직접 짰습니다. x는 원 데이터, p는 평균할 기간을 이야기 합니다.
myar<-function(x, p){
len<-length(x);
coef<-rep(1/p, p);
y<-rep(NA, len-p);
for (i in 1:(len-p)){
y[i]<-x[i:(i+(p-1))]%*%coef;
}
z<-1:(1000-p);
plot(z, y, type="l");
}
먼저 제 위 그래프의 y 데이터를 구한 다음 source("myar.txt")하고 그 다음에 myar(y, 5), myar(y, 20), myar(y, 100) 하면 각각 위의 그래프가 그려집니다.
여기서 %*%는 S와 R에서 행렬 곱하기인데 벡타인 경우 내적(inner product)이 됩니다. 이와 같이 시계열 데이터나 아니면 이미지 같은 2차원 공간 데이터를 각 시간별, 픽셀별로 이 내적을 계속 적용시키면 이게 convolution operator라고 하고 인공지능의 CNN의 C가 이 convolution의 약자입니다.
2차원 데이터를 위의 방식을 적용하면 어떻게 될까요. p=3일 경우 각 픽셀마다 그 주변 3*3 이미지 값에 3*3크기의 1/9 값을 곱하기 하면 됩니다. p=5 일 경우 픽셀 주변의 5*5 이미지 값에 5*5크기의 1/25 곱하기 하면 됩니다. 이렇게 적용하면 우리가 흔히 이야기하는 모자이크가 됩니다. p 값이 크면 클수록 사물을 알아보기 힘들고 이미지가 희미해집니다. 즉 contrast가 매우 낮은 이미지가 됩니다. contrast가 낮다는 것은 청바지 색 바랜것 처럼 이미지 값들의 변화가 없는 것을 말합니다.
다음에는 이 작업을 구체적으로 설명하겠습니다.