타임테이블 데이터에서 선형 추세 제거하기
이 예제에서는 타임테이블의 일별 주식 종가에서 선형 추세를 제거하는 방법을 보여줍니다. 데이터에 추세가 있는 경우, 추세를 제거하면 추세가 제거된 데이터의 평균이 강제로 0으로 설정되고 전체적인 변동이 감소합니다.
주가 데이터 만들기
일별 주식 종가를 포함하는 샘플 타임테이블을 만듭니다. 정규분포에서 임의 추출한 숫자를 사용합니다.
x = 0:300;
Time = days(x)';
dailyFluct = gallery("normaldata",size(x),2);
closing = cumsum(dailyFluct) + 20 + x/100;
StockPrice = closing';
TT = timetable(Time,StockPrice)
TT=301×1 timetable
Time StockPrice
_______ __________
0 days 21.749
1 day 21.892
2 days 22.227
3 days 21.443
4 days 21.768
5 days 21.251
6 days 22.193
7 days 23.368
8 days 21.332
9 days 20.698
10 days 22.449
11 days 22.946
12 days 24.004
13 days 25.503
14 days 26.783
15 days 24.937
⋮
주가 데이터를 플로팅하고 레이블을 지정합니다.
plot(TT,"Time","StockPrice"); xlabel("Time (days)"); ylabel("Stock Price (dollars)");
추세 제거하기
주가에 선형 피팅을 수행하는 detrend
를 적용하여 추세를 제거합니다. 추세가 제거된 데이터를 입력 타임테이블에 추가하도록 지정합니다.
TT = detrend(TT,ReplaceValues=false);
입력 데이터에서 추세 제거된 데이터를 빼서 추세선을 계산합니다.
trend = TT.StockPrice - TT.StockPrice_detrended;
TT = addvars(TT,trend,NewVariableNames="Trend")
TT=301×3 timetable
Time StockPrice StockPrice_detrended Trend
_______ __________ ____________________ ______
0 days 21.749 -3.7893 25.538
1 day 21.892 -3.7397 25.631
2 days 22.227 -3.4975 25.724
3 days 21.443 -4.3742 25.817
4 days 21.768 -4.1423 25.91
5 days 21.251 -4.7525 26.003
6 days 22.193 -3.9033 26.096
7 days 23.368 -2.8216 26.189
8 days 21.332 -4.9502 26.282
9 days 20.698 -5.6776 26.375
10 days 22.449 -4.0195 26.468
11 days 22.946 -3.6157 26.561
12 days 24.004 -2.6498 26.654
13 days 25.503 -1.2442 26.747
14 days 26.783 -0.056718 26.84
15 days 24.937 -1.9958 26.933
⋮
추세가 제거된 데이터의 평균 종가를 구합니다.
average_detrended = mean(TT.StockPrice_detrended)
average_detrended = -1.2488e-14
예상대로, 추세가 제거된 데이터의 평균은 0에 매우 가깝습니다.
추세가 제거된 데이터 시각화하기
원래의 일별 주식 종가, 추세선, 추세가 제거된 데이터, 추세가 제거된 데이터의 평균을 플로팅하여 결과를 표시합니다.
plot(TT,"StockPrice") hold on plot(TT,"Trend") plot(TT,"StockPrice_detrended") yline(average_detrended) legend("Input Data","Trend","Detrended Data", ... "Mean of Detrended Data","Location","northwest") xlabel("Time (days)"); ylabel("Stock Price (dollars)");