Main Content

타임테이블 데이터에서 선형 추세 제거하기

이 예제에서는 타임테이블의 일별 주식 종가에서 선형 추세를 제거하는 방법을 보여줍니다. 데이터에 추세가 있는 경우, 추세를 제거하면 추세가 제거된 데이터의 평균이 강제로 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)");

Figure contains an axes object. The axes object with xlabel Time (days), ylabel Stock Price (dollars) contains an object of type line.

추세 제거하기

주가에 선형 피팅을 수행하는 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)");

Figure contains an axes object. The axes object with xlabel Time (days), ylabel Stock Price (dollars) contains 4 objects of type line, constantline. These objects represent Input Data, Trend, Detrended Data, Mean of Detrended Data.

참고 항목

라이브 편집기 작업

함수