추세선(Trend line)의 매력(3)

추세선이 가격의 변동 방향을 가리키는 수단으로 사용될 때는 앞에서 소개한 관계나 패턴을 발견하는 일반적 도구와는 다소 다른 모습으로 사용된다. 뭐, 크게 복잡한 내용은 없다. 누구든 몇 가지만 인지하면 추세선을 바로 실전에 사용할 수 있다.

  1. 추세선은 시간의 흐름에 따라서 가격이 움직이는 방향을 가리킨다.
  2. 추세선은 시간적으로 최소한 두 지점을 연결한다.
  3. 가격의 변동 방향이라는 관점에서 추세선은 크게 세 가지가 있다: 하락 추세선(downtrend), 상승 추세선(uptrend), 보합(혹은 횡보: sideway). 하락 추세선은 곰 추세(bearish trend), 상승 추세선은 황소 추세(bullish trend)라고도 불린다.
  4. 고점(highs)연결하여 구성한 추세선을 저항(resistance) 선이라고 부르고, 저점(lows)을 연결하여 구성한 추세선을 지지(support) 선이라고 부른다.
  5. 가격의 흐름이 상승에서 하락, 반대로 하락에서 상승으로 바뀌는 것을 반전(reversal)이라고 부른다.

이상을 다음과 같이 그림으로 표시할 수 있다.

위 그림은 상승 추세(uptrend)를 보여주고 있다. 그래프의 상부 꼭지점(고점이라고 부른다)들을 연결하여 붉은색 추세선이 만들어졌는데 그것은 저항(resistance) 선을 나타낸다.  그래프의 하부 꼭지점을 연결하여 파란색 추세선이 만들어졌는데 그것은 지지(support) 선을 나타낸다.

아래 그림은 하락 추세(downtrend)를 보여주고 있다. 상승 추세의 경우와 방향만 다를 뿐 추세선을 그리는 방법은 동일하다.

아래 그림에서 보듯이 상승 추세는 황소의 뿔처럼 생겼다고 해서 황소선(bullish trend)이라고 부르고, 하락 추세는 곰의 등처럼 생겼다고 해서 곰선(bearish trend)라고 부른다.

아래 그림은 저항선과 지지선의 의미를 보여준다. 그래프에서 저항선을 넘어서 가격이 상승한 경우가 두 번 있다. 그 경우 우리는 그 가격이 다시 하강하리라 예상한다. 주식의 가격이 저항선을 넘어서 오르면 저항(?)을 받아서 다시 떨어지게 된다는 의미에서 이름이 저항선이다.

반대로 지지선 아래로 주식의 가격이 여러 차례 떨어졌다. 그 경우 가격이 다소 상승하리라는 예상이 가능하다. 무언가가 받쳐주고 있는 것처럼 말이다. 그래서 이름이 지지선이다.

주식 가격은 캔들스틱 차트와 추세선이 함께 사용되는 경우가 흔하다. 캔들스틱 차트는 다섯 가지 정보를 가지고 작성된다. 몸통(real body)이라고 부르는 부분은, 가격이 떨어졌을 때는 시가(opening price)가 맨 상단이 되고, 종가(closing price)가 맨 하단이 된다. 가격이 올라갔을 때는 종가가 상단, 시가가 하단이 된다.

아래 그림에서 가격이 떨어진 경우는 붉은 막대로 표시되고 가격이 올라간 경우는 초록색 막대로 표시되었다. 그 둘을 하얀색과 검정색으로 표시할 수도 있으나 중요한 점은 색으로 가격 하락과 가격 상승을 구분한다는 것이다. 몸통에 해당되는 막대를 보면 윗쪽과 아래쪽에 가는 선이 그려져 있다. 윗선(wick, 심지)의 끝은 장중최고가를, 아랫선(tail,  꼬리)의 끝은 장중최저가를 표시한다. 이렇게 해서 막대와 가는선은 특정한 장(예컨대 1일장)의 시가, 종가, 최고가, 최저가, 그리고 가격의 상승(혹은 하락)이라는 주요 정보를 모두 보여준다. 이 캔들스틱을 연결하여 추세선을 그리기도 한다.

아래 그림은 캔들스틱차트를 가지고 추세선을 그린 사례이다. 추세선을 그리는 두 가지 방법이 있다. 하나는 캔들스틱의 심지끝(장중최고가)을 연결해서 그리는 방법, 다른 하나는 몸통 상단(가격하향 추세인 경우 시가, 붉은색 몸통의 상단)을 연결하여 그리는 방법이다. 어느쪽을 선택하든 일관성을 유지해야 한다. 아래 그림에서 하얀색 번호 1과 2를 연결한 추세선을 보면 X 표가 된 시점을 지나가면 더 이상 유효하지 않다. 만약 그 이후의 시점들에도 유효한 추세선을 그리려면 숫자 1을 노란색 숫자 2와 연결해야 한다. 어느 지점을 연결해서 추세선을 그리느냐는 분석자의 판단에 달려 있다. 

이상으로 간략히 가격 추세선과 캔들스틱차트를 살펴보았다. 이 정도의 지식을 갖고 주식변동 차트를 관찰해도 어느 시점에서 주식을 사고 팔 것인지를 결정할 수 있다. 문제는 국면이 하락 추세일 일부인지, 상승 추세의 일부인지, 아니면 하락 추세 중의 일시적 상승 국면인지 혹은 상승 추세 중 일시적 하락 국면인지, 아니면 하락 추세에서 상승 추세로 돌아서는 반전 국면인지에 대한 판단에는 불확실성과 리스크가 따른다는 점이다.

그래프는 그런 판단에 약간의 도움이 되는 것 뿐이다. 주식 투자의 성패는 올곧이 투자자의 판단과 선택에 달려 있다.

이상으로 추세선에 대한 소개를 마친다. 추세선(혹은 추세선 분석)은 전문적인 통계 지식 없이도 누구나 사용할 수 있는 도구이다. 특히 엑셀은 아주 손쉽게 추세선을 그릴 수 있게 해준다.

추세선(Trend line)의 매력(2)

선형적합에 가장 널리 사용되는 방법은 OLS(Ordinary Least Sqaures, 최소자승법)이다. 간단히 말하자면, 독립변수의 각 값에서 직선에 의해 예측된 점으로부터 관측점까지의 거리를 제곱하여 더한 값을 최소화(최소자승의 의미)하는 추세선이다.

위 그림은 어떤 음향기기 대리점에서 광고횟수에 따른 음향기기 판매액의 변동을 기록한 것이다. 왼편 상단의 표를 보면, 첫 주에는 2회 광고를 냈고, 50달러의 매출을 올렸다. 둘째 주에는 5회 광고를 냈고, 57달러의 매출을 올렸다. 3주차에는 1회 광고에 41달러, 4주차에는 3회 광고에 54달러의 매출을 올렸다.

위 그림의 오른편에는 이 데이터가 그래프로 표현되어 있다. 이 그래프는 주차는 무시하고 광고횟수와 매출액의 관계를 보여주고 있다. 그래프를 보면 1회 광고를 냈을 때 41달러 매출을 올리기도 하고 38달러 매출을 올리기도 했다. 2회 광고를 냈을 때 50달러를 올리기도 하고 46달러를 올리기도 했다. 3회 광고를 냈을 때는 54달러를 올리기도 했고, 48달러를 올리기도 했다.

엑셀에서 이 그래프에 추세선을 그렸더니 파란색 점선이 나타났다. 수식으로 표현하니  이다. 그냥 눈으로 봐도 이 추세선은 광고횟수(x)와 매출액(y) 사이의 관계를 잘 대표하는 것 같다.

이 추세선으로 예측된 y 값을 구하려면, 위 식에 1, 2, 3, 4, 5를 각각 넣으면 된다. 아래는 그렇게 해서 구한 예측된 매출액, 그리고 그것과 실제 매출액과의 차이인 오차가 제시되어 있다. 그 오차를 제곱하여 더한 값이 오차제곱의 합 75.95(달러)이다.

이 값은 ‘최소자승’의 정의상 자승값 중 최소이기 때문에 다른 어떤 직선을 그려도 오차제곱의 합이 이보다 작을 수는 없다. 이 추세선은 회귀선(regression line)이라고도 불리는데 구하는 과정은 다음과 같다.

오차(error)란, 주어진  값에서 실제로 관찰된  값과,  라는 방정식(직선의 식)을 통해서 추정된 의 값(), 즉,

과의 차이()를 말한다.

아래 그림에서 별로 표시된 것은 관찰값이고 회귀-추세선의 예측값으로부터 거리–중괄호로 표시된 부분–가 편차(오차, deviation, error)이다.

이 오차의 제곱을 모두 더하여 얻어지는 수, 즉, 오차제곱의 합(sum of squared errors, SSE),

를 최소화한다는 기준을 만족시키는 식 (1)의  (절편)와 (기울기)을 구하는 것이다.

식 (2)에 식 (1)을 대입하면,

이 식을 최소화하는 와 를 구하기 위해서는 두 미지수에 대해 편미분을 하고 각각을 0으로 놓고 풀면 된다.

먼저 절편 에 대해 식 (3)을 편미분해 보자.

이 식의 양변을 -2로 나누고 시그마에 관해 정리하면,

여기서 이므로, 그것을 좌변에 놓고, 나머지 항을 우변으로 이항한다.

양변을 으로 나누면,

여기서 는 의 평균 이고, 는 의 평균 이므로, 결국

가 된다.

다음 기울기 에 대해 편미분 하자.

이 식의 양변을 -2로 나누고 괄호를 풀면,

식 (6)을 식 (7)에 대입하고 정리하면 약간의 복잡한 계산을 거쳐서 아래 식을 얻는다.

데이터를 가지면 (8)을 풀 수 있고, 거기서 얻은 기울기 의 값을 (6)에 대입하고 데이터로부터 X의 평균과 Y의 평균을 구해서 대입하면 절편 를 구할 수 있다.

도출 과정에 합성함수의 편미분, 시그마의 편미분이 포함되어 있어 다소 복잡한 수학적 표현이 되었다. 다행히 그 도출과정을 모두 이해하지 못한다고 하더라도 엑셀에서 데이터를 가지고 좌표상에 분포를 표시한 후에 아래 그림처럼 추세선 옵션 창에서 선형 추세선과 ‘수식을 차트에 표시하기’를 선택하면 그것을 손쉽게 구할 수 있다. 만약 선형(직선) 추세선이 데이터를 적절히 요약하지 못한다고 생각되면, 지수, 로그, 다항식, 이동평균 등 다양한 모습의 추세선을 적합할 수 있다.

현실에서 추세선은 주식, 암호화폐, 금, 선물 등의 투자에 널리 활용된다. 그 때 추세선은 해당 상품의 가격 변동의 방향을 의미한다. 근본은 통계학에서의 추세선과 다르지 않지만 개념과 용어가 다르기 때문에 다음 포스팅에서 간략히 소개하겠다.

추세선(Trend line)의 매력(1)

대학에서 통계학 수업을 수강하면, 대체로 한 달 이내 그래프(graph)를 배우게 된다. 아마도 그래프가 데이터를 요약하기 간편하고 프리젠테이션에 효과적인 도구이기 때문이 아닐까 생각한다.

그렇다고 통계학에서 그래프가 좋은 대우를 받았던 것은 아니다. 수식과 숫자에 약한 초보자 혹은 비전공자에게 통계적 발견을 소개하거나 통계분석 결과를 집약해서 보여주는 도구 정도로 간주되는 게 보통이었다. 한 마디로 통계에서 그래프는 부수적인 수단 혹은 주변적 도구에 불과했다. 탁월한 통계학자였던 John W. Tukey는 예외라고 할 수 있겠지만, 그 마저도 그래프를 데이터를 탐색해서 가설을 끌어내는 수단 정도로만 생각했다(Exploratory Data Analysis를 참조하시오).

사실 결코 그래프가 수식이나 숫자만큼 엄격하고 치밀한 표현 수단일 수는 없을 것이다. 더구나 거의 항상 한 줌에 불과한 표본(sample) 데이터를 손에 쥐고 모수(parameters)를 추정해야 했던 통계학자들에게 데이터의 그래프적 표현이란 기껏해야 데이터를 탐색하거나 분석 결과를 전달하는 수단에 불과했을 것임에 분명하다.

그러나 데이터의 시각화(data visualization)–그래프를 그리는 것을 요즘은 이렇게 표현한다–는 그것이 지난 단점(엄격하지도 치밀하지도 못하다)에도 불구하고 빅데이터 시대에 각광받는 분야가 되었다. 아마도 강력한 두 가지 매력 때문일 것이다.

첫째는 직관성이다. 특히 두 변수의 관계나 한 변수의 시간에 따른 변화를 보여주는 데 그래프보다 더 직관적인 도구는 없을 것이다. 상관계수처럼 숫자 하나로 보여줄 수 있지만 그것은 범주형 변수(categorical variable)에는 사용할 수 없고, 교차표(cross-table)처럼 하나의 표로 보여줄 수도 있지만 수치형 변수의 경우 정보를 잃으면서 범주형 변수로 변환해야 하는 약점이 있다.  특히 하나의 변수가 시간에 따라 변해가는 모습을 직관적으로 느끼게끔 보여주는 데는 그래프가 최고임에 틀림없다.

위 그래프는 통계청에서 다운로드 받은 데이터를 가지고 엑셀로 그린 것이다. 우리 경제가 약 65년 동안 세 해(1980년, 1998년, 2008년)를 제외하고 눈부시게 성장했음을 이보다 더 잘 나타낼 수 있는 방법이 있을까 하는 의문이 들 정도 인상적이다.

둘째는 소음 제거 능력이다. 이는 엄격하지 못하다는 단점이 장점으로 작용하는 점이다. 두 변수 사이의 관계나 어떤 변수의 변동 패턴을 파악하는 데 있어서는 디테일이 장애 요인이 되곤한다. 디테일에 집착하면 데이터 마이닝에서 말하는 과적합(overfitting)의 함정에 빠지게 된다. 디테일을 반영한 모형(model)은 그 모형을 훈련시키는 데 사용한 학습 데이터에는 대단히 잘 적합하겠지만 일반성이 떨어져서 모형의 예측력이 약하게 된다는 말이다.

 

위 그래프는 2010년 3월 10일부터 5월 12일 사이 약 두 달 동안 인텔주식의 가격이 어떻게 변동했는 지를 보여준다. 붉은 색의 선은 엑셀에서 3차 다항식을 적용해서 추세선을 그린 것이다. 그래프 메뉴에서 추세선 서식 –> 추세선 옵션 –> 다항식 3차수를 선택하면 그려진다. 그 추세선이 주가의 변동을 썩 잘 나타내주고 있다고 생각되지는 않지만 다른 추세선에 비하면 상대적으로  우수한 편이다.

그래프의 직관성과 소음제거능력이라는 두 가지 장점은 빅데이터에서 특히 빛이 난다. 데이터의 양이 많아지면 신호(signals) 대 소음(noises)의 비율이 높아지고, 그 때문에 직관적으로 변수 사이의 관계를 추정하거나 하나의 변수에 존재하는 패턴이나 트렌드를 찾기 어렵게 된다. 그래프는 거칠기는 하지만 과감하게 데이터에 숨겨진 패턴을 드러내 준다.

그러한 장점을 지닌 그래픽 기법 중 하나가 바로 추세선(trend line: 영어 표현 그대로 트렌드 라인이라고도 부름)이다. 위 사례에서처럼 추세선이 다차 함수 행태를 취할 수도 있지만 대체로 1차나 2차 함수이다.

특히 1차함수 직선이 자주 사용된다. 데이터의 숨은 패턴을 잘 보여주는 직선을 데이터가 분포된 좌표에 표시하는 것을 선형 적합(linear fitting)이라고 부른다. 선형적합은 두 변수(혹은 그 이상의 변수들)로 구성된 데이터의 추세선을 그리는데 가장 널리 사용되므로 포스팅을 바꾸어 소개한다.

어떻게 하면 교차표를 잘 만들 수 있나?

통계를 사용한 보고서에서 가장 많이 사용되는 기법 중 하나는 교차표(cross-table: 분할표, contingency table라고도 부름)이다. 교차표는 사회과학 전공자들이 대학이나 대학원에서 익혀두면 평생 요긴하게 써먹을 수 있는 통계 지식이다.

그런데, 학생들은 물론이고 전문가들이 작성한 논문이나 보고서(보고서의 부록으로 제시하는 교차표가 아니라 본문에 삽입되는 교차표)에 담긴 교차표를 보면 아쉽다는 생각이 들 때가 많다. 그래서 교차표를 작성할 때 유용하게 적용할 수 있는 몇 가지 원칙을 소개한다.

논문이나 보고서에서 학생들은 흔히 엑셀, SPSS, 파이썬 같은 소프트웨어가 생성하는 교차표를 그냥 옮겨 놓는다. 물론 좀 재치있는 학생들은 그것을 약간 다듬어 보기 좋게 만들거나 보다 신기한 모양의 그래프로 바꾸어 놓기도 한다. 진실은 통계 소프트웨어가 쏟아내는 교차표를 그냥 가져오는 경우가 최악(?)이지만 외양을 바꾼다고 교차표의 품질이 크게 개선되지는 않는다는 사실이다. 문제가 그보다 더 근본적인 수준에서 발생하기 때문이다. 그점들에 관해 한번 살펴 보자.

정보성과 전달력 사이의 균형 잡기

기본적으로 교차표는 범주형 변수(categorical variables)들의 관계를 나타내 주는 도구이다. 수치형 변수와 달리 범주형 변수는 비교적 소수의 범주(category) 혹은 계급(class)으로 구성되어 있다.

예컨대 성별은 남녀 2개, 대학 학년은 1,2,3,4학년 4개, 인종은 대체로 황인, 백인, 흑인 3개, 종교는 좀 많아서 흔히 불교, 유교, 개신교, 천주교, 유대교, 이슬람교,  기타 7개의 범주로 되어 있다. 설문조사에서 자주 사용되는 리커트 척도는 ‘매우 반대’, ‘반대’, ‘보통’, ‘찬성’, ‘매우 찬성’과 같이 5개의 범주로 구성된다.

수치형 변수라고 교차표를 적용할 수 없는 것은 아니다. 원래 측정은 수치형으로 했더라고 얼마든지 범주형으로 전환할 수 있다. 다만 수치형 변수를 범주화(그룹화라고도 한다)하면 정보를 잃는다.

예컨대 가구소득은 흔히 수치형 척도를 사용해서 측정된다. 설문조사 응답자에게 해당 가구의 평균적인 월별 수입을 만 단위까지 직접 기재하게 한다. 연구자가 거주지역(대도시, 중소도시, 농촌)에 따른 소득의 차이를 보여주고자 한다면, 거주지역별 소득 평균을 표나 그래프로 만들어 제시할 수도 있겠지만, 거주지역과 가구소득의 교차표를 만들어 그 두 변수들 사이의 관계를 보여줄 수도 있다. 그런 경우 가구소득을 범주화해야 교차표를 만들 수 있다. 수치형 변수를 사후적(측정후)으로 범주화하는 것이다.

물론 사람들이 가구 소득을 정확히 모르거나 알려주는 것을 기피하기 때문에 현실에서는 아예 정확한 측정을 포기하고,  ‘100만원 미만’, ‘100만원 이상 300만원 미만’, ‘300백만원 이상 500만원 미만’, ‘500만원 이상 700만원 미만’, ‘700만원 이상’처럼 범주를 제시하여 응답자가 선택하게 하기도 한다. 이는 원래 수치형으로 존재하는 변수를 범주형으로 측정하는 경우이다.

연구자는 교차표에 들어가는 각 변수(특징)의 범주를 몇 개로 할 것인가를 결정해야 한다. 성별과 같은 변수는 범주의 수가 2개로 고정되어 있지만 그것은 예외적인 경우이다. 수치형 변수의 볌주화에 있어서 당연히 그것은 중요한 선택이지만, 다수(3개 이상)의 범주로 측정된 범주형 변수인 경우에도 왕왕 재범주화는 중요한 결정이 되곤 한다.

2개의 변수로만 구성된 2차원 교차표의 경우는 비교적 여러 개의 범주들을 무리없이 사용할 수 있지만, 3개, 4개 혹은 그 이상의 변수들로 구성된 다차원 교차표의 경우 변수들의 범주 수는 과감히 줄일 수밖에 없다.

예컨대 성별, 교육수준, 출신계층에 따른 직업적 성취를 보고자 한다면, 성별 2개, 교육수준 2개(대졸, 대졸 미만), 출신계층 3개(상층, 중간층, 하층), 직업적 성취 4개(생산직, 서비스직, 사무직, 경영자)만으로 구성해도 48개의 칸(cell)을 갖는 복잡한 교차표가 된다. 조금만 디테일에 욕심을 내면 교차표 칸의 갯수는 금방 100개가 넘어가고 직관적 해독이 불가능한 교차표가 될 것이다.

꼭 기억해 둘 점은, 복잡한 교차표 분석을 수행하는 경우(그 경우 로그선형 모형 같은 수학적 모형과 그것을 구현하는 알고리즘이 패턴을 찾아내거나 관계를 드러내준다)를 제외하고 교차표는 직관적인 커뮤니케이션(의사소통)을 위해서 만든다는 사실이다. 직관적 커뮤니케이션! 이 점을 놓치면 교차표는 목표와 방향을 잃고 만다.

실제 사례를 하나 보자. 아래 표는 kiva.org라는 국제적인 소액대출(micro-financing) 사이트가 공개한 대출 데이터이다. 그것은 약 67만 건의 큰 데이터셋으로 아래는 MS 엑셀에 불러들여서 보기 편하게 숨기기(인스턴스 11부터 671,185까지는 숨겨져 있음)를 해놓은 결과이다.

<그림 1> Kiva.org의 대출 내력 데이터셋

이 데이터셋은 대출에 관련된 20 가지 변수를 담고 있는데, 이 그림에는 대출 일련번호, 대출신청액(funded amount), 대출액(loan amount), 대출이 시행된 활동(actor), 대출이 시행된 부문(sector), 대출 사용 용도(use), 대출이 시행된 국가(country)와 지역(region)이 보인다.

엑셀의 피벗테이블 기능을 이용하면 손쉽게 아래와 같은 교차표를 만들 수 있다.

<그림 2> 엑셀의 피벗 테이블로 작성한 교차표(범주화 전)

대출 부문(sector)과 대출액(loan amount)의 교차표인데, 대출 부문은 범주형(15개 범주) 변수이고 대출액은 수치형 변수(25 달러부터 10만 달러까지)이다. 대출액을 범주형으로 변환하지 않으니 좀 말도 안되는 교차표가 생성되었다. 숨기기 기능을 사용했기 때문에 열의 처음과 끝 부분을 볼 수 있지 그렇지 않으면 한꺼번에 교차표 전체를 보는 것은 애시당초 불가능했을 것이다. 이렇듯이 교차표 분석을 하려면 수치형 변수는 먼저 범주화를 해야 한다.

25 달러부터 10만 달러까지 분포하는 대출액을 몇 개의 범주로 어떻게 범주화할 것인가? 이 데이터는 소액 대출에 관한 것이다. 판단 기준이 무엇이냐에 따라 다르기는 하지만 5만 달러나 10만 달러를 소액으로 간주하기는 어려울 것이다. 5천 달러 정도면 소액 대출의 상한선으로 볼 수 있을 않을까? 그렇다면 5천 달러 이상을 하나의 범주로 묶고, 5천 달러 이하를 그룹화(엑셀 용어)하자. 그런데 급간(clas range)을 어느 정도 크기로 할까? 1천 달러로 하면 5개의 범주가 생성된다. 그런데 개도국에서는 500 달러도 큰 돈이다. 5백 달러를 급간으로 해서 10개의 범주를 생성하는 것이 어떨까? 그렇게 해서 생성한 교차표가 아래에 있다.

<그림 3> 대출액을 범주화하여 재작성한 교차표

15_by_11의 교차표가 생성되었다. 교차표에 사용된 변수들의 이름도 붙이고 단위도 표시했다. 이 표를 보면, 전체 대출 건수의 거의 절반이 500 달러 미만임을 알 수 있다. 만약 1,000 달러를 급간으로 삼았다면 그 사실을 모를 뻔 했다.

각 부문별 대출액별 빈도 분포를 보기 위해 행합계비율로 필드 표시를 바꾸어 보자.

<그림 4> Kiva.org의 마이크로파이낸싱 내력(2016. 3~2018.3): 대출규모별 대출건수의 대출 부문별 비율(%). 데이터 출전: Kaggle.com.

‘필드 표시’에서 행합계비율을 선택했더니 위의 교차표를 얻었다. 이 표를 잠깐 들여다보면, 전체 대출 건수의 49.24%가 500 달러 미만이었고, 74.89%가 1천 달러 미만이었다. 대출 부문별로는 개인 용도의 경우 500 달러 미만이 압도적으로 많았으며, 소매업, 운수, 식품, 예술 부문에서도 500 달러 미만의 대출이 절반 정도를 차지했다. 반면에 도매업, 연예, 교육 부문은 70% 이상의 대출이 500 달러 이상이었다.

이 사례에서 보듯이 교차표를 통해서 제시하려고 하는 것은 두(혹은 그 이상) 변수들의 관계에 대한 데이터 기반의 증거이다. 그것은 최대한 정확한 사실이어야 한다. 정보손실의 관점에서만 보면, 가장 바람직한 범주화(categorization)는 변수들의 최대한 상세한 범주를 유지하는 것이다. 변수의 측정을 지나치게 단순화하면–예컨대 범주의 갯수를 크게 줄이면–많은 정보 손실이 발생하게 된다.

그러나 정보손실을 줄이기 위해 디테일에 집착하면 정보전달에 있어 세 가지 문제가 발생할 수 있다. 1) 이상치(outliers), 측정 오류 등 같은 소음(noise)이 두드러져서 데이터로부터 신호(signals)를 판별해 내기 어려워질 수 있다. 2) 범주가 너무 많아져서 구조적 영(structural zeros)이나 극소수의 빈도만 있는 칸이 늘어나게 된다. 이 현상은 데이터가 적거나 데이터가 편중되어 있는 경우에 발생할 가능성이 높다. 3) 교차표의 칸이 너무 많아져서 교차표가 크게 복잡해지고 그에 따라 직관성이 떨어지게 된다. 

만약 위 사례에서 부문 대신 국가별 대출 분포를 교차표로 만들면, 나라 수만도 120 개국이 넘기 때문에 표를 만드는데 당장 문제가 생긴다. 행이 127개이고 열이 10개라면 교차표에는 총 1,270 개의 칸이 존재하기 때문이다. 그렇다면 분석에 포함될 나라의 수효를 적절하게 줄여야만 할 것이다. 한 가지 방법은 대륙별로 가장 대출 건이 많은 2-3개의 국가만 포함시키고 나머지 국가들은 모두 ‘기타’라는 잔여범주(residual category)로 처리하는 것이다. 그렇게하면 나라(country)는 한 열 개 남짓의 범주로 줄어들 것이다.

그런데, 만약 분석에 포함될 국가 수를 다섯 개 이하로 줄이거나 다섯 개 이하의 범주(‘대륙’이 하나의 사례가 될 수 있다)로 범주화하면 커다란 정보 손실이 발생할 가능성이 대단히 크다. 분석 목적에 따라 정도의 차이가 있겠지만 말이다. “아프리카, 아시아, 중남미, 기타”로 나누었다고 상상해 보라. 만약 분석 목표가 국가별 대출 분포라면 그런 범주화는 심각한 정보 손실을 수반할 것임에 분명하다.

이 사례에서 보듯이 교차표를 작성하는데 전달력에 집착하면 정보성이 떨어지고 정보성을 지나치게 우선시하면 전달력이 저하되는 득실교환(trade-off) 현상이 발생한다. 득실 교환 문제를 해결하는 일반적인 원칙은 없다. 그 때 그 때 연구자의 사려 깊은 대처가 필요한 문제이다.

교차표 작성에 고려되어야 할 한두 가지 원리만 추가하다면, 우선 완결성(completeness)을 들 수 있을 것이다. 교차표는 그것만 보아도 그 표의 속성과 내용을 충분히 파악할 수 있어야 한다. 직관적인 표제, 변수 이름, 그리고 출전, 수집일, 수집 기관 등을 담은 주석이 필요하다. 위 <그림 4>는 완결성이 높은 모습의 교차표이다.

다른 하나는 교차표가 창저적(彰著的, revealing)이어야 한다는 것이다. 즉, 교차표가 변수들의 관계에 관해 흥미 있는 사실을 드러내주어야 한다는 말이다. 예컨대 <그림 4>를 보면, 교육(education) 부문의 건당 대출액이 주택(housing)이나 제조업(manufacturing) 부문보다  상대적으로 크다는 사실이 흥미롭다.

교차표가 아무리 객관적이고 과학적인 의사소통 도구라고 해도 신기하고 예쁘다는 점이 나쁠 수는 없다. 문제는 그것 때문에 교차표가 원래 목표했던 의사소통에 실패한다면, 교차표는 목표와 방향을 잃은 셈이다.

이 간략한 포스팅이 교차표 혹은 표 작성이 도움이 되길 바란다(2019/03/17, 윤영민)

데이터과학을 위한 수학 복습(4)

이번에는 미분과 시그마(∑)를 복습하자. 데이터과학에서 미분은 아주 중요하다. 최대값이나 최솟값을 구하는 도구로 사용되기 때문이다. 미분(derivative)이란 어느 순간에 발생하는 변화량이다. 그 변화량이 기울기이다. 미분은 다음과 같이 표시된다.

함수 가 있을 때, 미분의 정의는,

함수 에 대해 미분한다는 의미는, 가 아주 조금 변했을 때 가 얼마나 변했는지를 구한다는 것이다. 1차방정식의 기울기는 다음과 같이 구할 수 있다.

식 (1)과 (2)는 기본적으로 동일한 의미이다. 단지 식 (2)에서 를 0에 가까운 값을 가지게 하면 식(1)과 같이 된다.

과 같이 함수가 상수인 경우, 미분값은 항상 0이다.

그래프로 그려보면, 함수가 상수이면 어느 장소든 기울기가 0이다.

가 상수일 때, 에 대한 간단한 미분 함수는 다음과 같이 정의된다.

예컨대,  를 에 대해 미분하면, 를 에 대해 미분하면, 이다.

함수의 최솟값, 최대값을 찾는 문제에서 미분이 주로 많이 이용된다. 다음과 같은 2차 함수가 있다고하자.

최솟값은 미분함수가 0이 되도록 방정식을 풀면 된다.

그래프에서 보면 함수곡선이 y축과 만나는 점인 (0,1)의 x값이다.

편미분(partial derivative, , 델타): 어떤 함수가 여러 개의 변수를 가질 때 각 변수에 대해 수행하는 미분을 편미분이라고 한다. 편미분의 표시는 다음과 같다.

와 같이 변수가 두 개인 다음 방정식을 보자.

이 식을 에 대해서 편미분하면, 과 4는 과 관계가 없으므로 상수항 취급을 받는다. 따라서 편미분 결과는 다음과 같다.

에 대해서 편미분하면 같은 원리로,

편미분은 중다회귀분석, 딥러닝, 신경망에 사용된다. 미분에 대해 몇 가지 사항을 추가하면,

합성함수의 미분은 연쇄법칙(chain rule)을 따른다. 가 에 대해 미분 가능할 때, 의 도함수는

이를 말로 표현하면, 전체를 미분한 다음 속의 식을 미분하여 곱한다는 것이다. 한 예로 에 대하여 미분해보자.

로 둔다. 그러면 이 된다. 이 때 이므로 이다. 그런데 이므로

이다. 결국 전체식을 미분한 값[]에다 속의 식을 미분한 값[]을 곱한 값이다.

또 하나 기억해 둘만한 식은  이다. 상수가 곱해진 함수의 편미분은 함수를 편미분한 값에 그 상수를 곱한 것과 같다.

데이터과학에서 가장 자주 사용되는 수학 도구는 시그마(∑)이다. 시그마의 성질을 몇 가지만 기억해두자.

이 중 마지막 식만 말로 바꾸면, 시그마(합)의 편미분은 편미분의 시그마(합)이다(Partial derivative of a sum is just the sum of the partial derivatives).

미분과 시그마를 선형회귀에 적용해보자.

회귀식에 의한 예측은 . 오차는 관측값과 회귀방정식에 의한예측값과의 차이 . 최소제곱법에 의하면, 오차제곱의 합(Sum of Squares of Errors, SSE)을 최소화하는 계수(b, a)를 구해야 한다. 그럴려면, SSE을 각 회귀계수(와 절편)에 대하여 미분한 값이 0이 되어야 한다.

먼저 절편 b에 대해 편미분하면,

여기에 시그마의 편미분은 편미분의 시그마라는 공식, 합성함수의 미분은 전체식의 미분 곱하기 속의 식의 미분이라는 공식 등이 적용되었다. 이 식을 정리하면 아래와 같다.

다음 에 대해 편미분하면,

이 식을 정리하면,

(4)와 (5)를 정규방정식(normal equation)이라고 한다. 데이터를 가지고 이 연립방정식을 풀어서 절편과 기울기를 구한다.

이상으로 미분과 시그마에 대한 복습을 마친다. 데이터과학을 수행하다 보면 여기서 복습한 내용보다 더 복잡한 수식이 필요하곤 하지만 그때 그때 인터넷 등을 참고하면 이해할 수 있을 것이다.

데이터과학을 위한 수학복습(3)

벡터에 대한 학습은 이 정도로 마치고 이제 행렬(matrix)에 대해 복습해 보자. 행렬은 벡터의 개념을 확장시켜 일반화한 것이다. 벡터는 행렬의 특수한 경우이다.

아래 사례를 보자. 프로야구 선수 다섯명의 타수 데이터이다.

이 데이터를 행렬로 간단히 표시할 수 있다.

첫 열은 안타, 둘쨋 열은 2루타, 셋째 열은 3루타를 나타낸다. 첫 행은 김선빈, 둘번째 행은 박건우, 셋번째 행은 박민우, 네번째 행은 나성범, 다섯번째 행은 박용택 선수의 기록이다. 각 선수의 안타 기록을 동일한 순서로 나타낸 것이다.

일반적으로 가로 n 줄(n행), 세로 m줄(m열)로, 배열하고 괄호로 묶은 것을 행렬이라고 한다. n행과 m열을 가진 행렬 A의 차원은 이다. 이 행렬은 첨자를 써서 아래와 같이 표현될 수 있다.  이는 행렬의 기본 형식이다.

행렬에는 기억해 둘 몇 가지 종류가 있다.

정방행렬(sqaure matrix): 행과 열의 개수가 같은 행렬로 행렬을 n차 정방행렬이라고 한다.

대각행렬(diagonal matrix): 대각 성분을 제외한 나머지 값들이 모두 0인 정방행렬. 특히 대각 성분이 모두 1인 행렬을 단위행렬(identity matrix)라고 하며, E 혹은 I로 쓰고 다음과 같이 정의한다.

단위행렬은 숫자 1과 같은 의미로 해석.  단위행렬과  단위행렬은 다음과 같이 쓸 수 있다.

영행렬(zero matrix): 행렬의 모든 성분이 0인 행렬을 영행렬이라고 하고, 알파벳 O를 써서 다음과 같이 표현한다. 수학에서 0과 같은 의미이다.

전치행렬(transpose matrix): 행렬의 행과 열을 바꾼 행렬을 의미한다. A의 전치행렬은  혹은 으로 표시한다.

엑셀에서 전치행렬 만들기 함수는 

엑셀에서 아래의 야구선수 데이터로 전치행렬을 만들어 본다.

엑셀에서 행렬 처리는 일반 숫자의 처리와 두 가지 점이 다르다. 반드시 먼저 행렬이 들어갈 범위를 선택해 주어야 한다(여기서 G2:L5). 그런 다음 수식(여기서 =TRANSPOSE(A1:D6))을 입력한다. 수식의 입력이 끝나고 나면 [Shift]+[Ctrl]+[Enter]을 눌러야 한다. 그냥 [Enter]를 누르면 오류가 발생한다.

행렬의 덧셈과 뺄셈은 다음과 같이 수행한다.

 라고 정의한다면,

행렬의 곱셈:

행벡터 와 열벡터 를 다음과 같이 정의한다면,

는 다음과 같이 계산된다.

라고 정의한다면,

행렬 A의 차원은 이며, 행렬 B의 차원은 이다. 두 행렬의 곱 C는 행벡터와 열벡터의 곱셈이 4번 반복되며,  차원의 행렬이 된다. 새 행렬 C는 A 행렬의 행  B 행렬의 열의 차원을 갖게 된다. 이점은 잘 기억해두어야 한다. 엑셀에서 행렬 연산시 계산 결과의 범위를 사전에 선택해야 하는데 그 때 사용된다.

행렬의 곱셈이 성립하기 위해서는 조건이 있다. 앞의 행렬의 열과 뒤의 행렬의 행의 차원이 같아야 한다.

엑셀에서 행렬의 곱셈을 지원하는 함수로 가 있다.

행렬의 곱셈에는 교환법칙이 성립하지 않는다(). 결합법칙과 분배법칙은 성립한다.

위 그림에서 보듯이 엑셀에서 행렬 연산을 손쉽게 수행할 수 있다.

라고 하면,

A+B는 먼저 연산 결과가 들어갈 곳에 범위를 선택한다(A22:C24). 그 다음 수식 =A15:C17+F15:H17를 입력한다. 그리고 [Shift], [Ctrl], [Enter]을 동시에 누르면 결과 값 을 얻는다.

AB는 연산 결과가 들어갈 곳인 F23:H25를 선택한다. 그 다음 수식 =MMULT(A15:C17,F15:H17)을 입력하고, Shift, Ctrl, Enter을 동시에 누르면 결과 값인 를 얻는다. 그런데 만약 BA를 동일한 방법으로 구하면, 

를 얻는다. 임을 확인할 수 있다. 즉, 교환법칙이 성립하지 않는 것이다. 그림에서처럼 (AB)C와 A(BC)를 구해보면 두 결과가 동일하다. 즉, 결합법칙이 성립함을 알 수 있다. 유사한 방법으로 분배법칙이 성립함을 확인해 볼 수 있을 것이다.

역행렬(inverse matrix): 행렬 연산에 나눗셈은 없고 대신 역행렬이 있다. 행렬 A가 있을 때 역행렬은 다음과 같이 정의된다.

여기서 행렬 I는 단위행렬이다. 단위행렬은 일반적으로 숫자 1과 같이 해석된다. 위 식을 만족시키면 B는 A의 역행렬이며, 다음과 같이 표시한다.

이 역행렬은 으로 이루어지는 정방행렬에서만 계산 가능하다. 엑셀 함수는 이다.

행렬곱의 역행렬은 각 역행렬을 반대로 곱한 것이다.

연립방정식의 행렬의 이항을 가지고 역행렬의 쓰임새를 살펴보면,

행렬식(determinant)이 0이 아닐 때 역행렬이 존재한다.

엑셀에서 행렬식의 함수는 이며, 역행렬을 가지는 행렬을 가역행렬(혹은 정칙)이라고 하고 역행렬을 가지지 않은 행렬을 비가역행렬이라고 한다.

일반적으로 이원일차연립방정식

(a, b는 동시에 0이 아니고, c와 d도 동시에 0이 아님)에서 이라고 놓으면 주어진 방정식은 다음과 같이 된다.

엑셀을 가지고 살펴보자. 먼저 한 행렬에 어떤 행렬을 곱해서 단위행렬이 나오는 그 어떤 행렬을 역행렬이다.

위 그림에서 행렬 A 의 역행렬을 구하려면,  결과가 들어갈 곳의 범위 E3:G5를 선택하고, =MINVERSE(A3:A4)를 입력한 후 Shift, Ctrl, Enter를 동시에 누른다. A의 역행렬 B 가 생성된다. B가 A의 역행렬임을 확인하기 위해 AB를 구하니 를 얻었다. 단위행렬이다. B가 A의 역행렬임이 확인되었다.

연산에 역행렬을 응용하려면 먼저 행렬식을 구해서 역행렬이 존재하는가를 확인해야 한다. 그림의 예 는 연립방정식

을 행렬로 표시한 것이다. 양변에 의 역행렬을 곱해주면 x, y의 값을 구할 수 있는데, 먼저  의 행렬식이 0이 아님을 확인해야 한다. 행렬식을 구하려면, 먼저 결과가 들어갈 자리를 지정하고(H9), =MDETERM(C9:D10)을 입력한 다음 Enter를 누른다. 행렬식 값이 1이므로 역행렬이 존재한다. 이제   의 역행렬을 구한다. 결과가 들어갈 자리를 지정(C14:D15),  수식 =MINVERSE(C9:D10)을 입력한 다음 Shfit, Ctrl, Enter를 누른다. 그러면 역행렬 가 생성된다. 그것을  양변에 곱해준다. 좌변은 단위행렬이니 표시할 필요가 없고, 우변은 을 얻는다. 즉, 이다.

좌표변환과 행렬: 임의의 숫자에 어떤 특수한 행렬을 곱하면 값이 변하는데 이것을 기하학적인 의미로 좌표변환이라고 한다. 행렬을 곱하면 좌표가 변환되며, 역행렬을 곱하면 원래의 좌표로 돌아간다. 아래 그림에 X축 대칭이동, Y 축 대칭이동, 원점 대칭이동의 사례가 나와 있다.

x, y 좌표상의 점 (-1,-1)을 행렬로 표시하면 ,  을 거기에 곱하면(순서에 유의할 것!), 즉,  . 즉, 원점 대칭 이동된 점 (1,1)을 얻는다. 이번에는  을 곱하면, . 즉, x축 대칭이동된 점 (-1,1)을 얻는다.  그리고 을 곱하면, . 즉, y축 대칭이동된 점 (1,-1)을 얻는다.

끝으로 벡터와 행렬에서 아마도 꼭 언급하고 넘어가야 할 개념 중 하나는 고유값(eigen value)고유벡터(eigen vector)이다.

임의의 행렬 K가 ()인 n 차 정방행렬일 때 아래 식을 만족시키는 0이 아닌 벡터 와 정수 λ가 존재할 때 λ를 행렬 K의 고유값이라고 하고, 벡터 를 고유벡터라고 한다.

기하학적으로 고유벡터는 독특한 성질을 갖는다. 고유벡터는 선형변환 과정에서 회전시키더라도(위 식에서 정방행렬 K를 곱한 조치) 그 벡터가 위치한 선(line)상에서 일탈하지 않는다(즉, 크기만 변할 뿐 방향이 변하지 않는다: 위식의 우변에서 고유벡터가 스칼라인 λ 배 만큼 변했다).

위 그림에서 행렬 의 고유벡터는 이고 고유값은 3이다.  인데, 은 의 결과이다. 이나  같은 다른 벡터를 곱하면 그런 결과가 얻어지지 않는다.

데이터과학에서는 그러한 특성을 지닌 고유값과 고유벡터를 활용해서 소위 주성분분석(Principal Component Aanalysis, PCA)을 수행하곤 한다. 데이터과학자는 주성분 분석을 통해서 데이터의 차원을 축소하거나 숨겨진 변수를 찾아낸다.

주성분 분석에서는 변수들의 상관행렬(이것은 항상 정방행렬이다)을 위 식의 K에 대입한다. 상관행렬(표준화된 공분산 행렬)을 R이라고 하자.

λ가 스칼라(수)이기 때문에 단위행렬(I)을 곱해서 R과 동일한 정방행렬을 만들어 주었다. 이라는 조건 아래에서 이 등식이 성립하려면 이 역행렬을 갖지 않아야 한다. 즉,  비가역행렬이어야 한다. 그럴려면 그것의 행렬식이 0이어야 한다.

(만약 역행렬을 가지면 아래처럼 되어 고유벡터 가 영행렬이 되어야 해서 라는 정의에 위배된다.)

기하학적으로 행렬식은 선형변환 결과 얻어진 행렬의 면적을 나타낸다. 행렬식이 0이라는 것은 정방행렬을 구성하는 두 요소(변수)가 정확히 한 선 위에 모두 올라오도록 변환됨을 의미한다. 즉, 면적이 0이 된다는 것이다. 행렬식이 0이 되면, 두 벡터의 방향이 정확히 겹쳐지면서 평면의 벡터공간이 하나의 직선이 된다. 차원축소는 고유벡터의 바로 이 성질을 이용한다. 주성분 분석에 관해서는 별도로 포스팅할 예정이다.

벡터와 행렬에 관해서는 이 정도로 복습을 마치기로 하자.

데이터과학을 위한 수학복습(2)

이번에는 벡터의 내적(inner product)에 관해 알아보자.

원점 O에서  와 같은 벡터 를 만들 때 를 벡터 가 이루는 각이라고 한다.

 

일 때, 벡터 와 벡터 는 수직이라고 하며 기호 로 나타낸다.

벡터의 시작점을 원점으로 할 때 벡터의 끝점의 좌표를 벡터의 성분이라고 하며,

 혹은 로 표시한다. 이 때 벡터 의 크기(길이)는 ,  의 크기는 이다. 이 크기를 벡터의 노름(norm)이라고도 한다.

이 경우 벡터의 내적(혹은 스칼라적)은 다음과 같이 정의된다.

두 벡터의 크기(벡터의 크기는 절대값 기호로 나타냄)의 곱에 사이각의 코사인 값을 곱한 것이다. 기호로는  또는 로 나타낸다. 즉,

벡터의 내적은 아래와 같이 벡터의 성분을 사용하여 나타낼 수 있다.

평면벡터 에 대하여

그리고 내적의 정의에 의하여

두 벡터 사이 각의 코사인 값은 두 벡터의 내적을 두 벡터의 크기의 곱으로 나눈 값이다. 영벡터가 아닌 두 벡터 의 내적이 0이면, 두 벡터는 직교(orthogonal)한다(혹은 수직이다)고 말하고 라고 표시한다.

이 코사인 값은 두 벡터의 상관성을 측정하는 코사인 유사도(cosine similarity)라는 척도에 바로 적용된다. 온라인 서점의 예를 보자.

위 그림에서 사용자 1은 책을 {B,C,B} 순으로 살펴보았고, 사용자 2는 책을 {C,A,B} 순으로 살펴보았을 때, 만약 사용자 3이 들어와서 책 A를 살펴보고 있다면, 그에게 어떤 책을 추천하면 좋을까?

온라인 서점은 사용자들의 클릭 혹은 검색 행태에 관한 데이터를 가지고 책들 사이의 상관성을 파악해 둔다. 그리고 만약 어떤 새로운 사용자가 들어와서 특정한 책을 살표보면 온라인 서점(의 컴퓨터)는 그 책과 상관성이 가장 높은 책(들)을 추천한다. 그 때 코사인 유사도가 사용될 수 있다.

온라인 서점은 사용자들의 검색 데이터를 가지고 품목(책) 대 품목(책) 행렬을  구한다. 그러면 각 책은 행벡터를 갖게 된다. 책 A는  , 책 B는  등의 행벡터를 갖는다. 그러면 책 A와 책 B 사이의 코사인 유사도는 위에서 소개한 사이각의 코사인 값을 구하는 공식으로 계산될 수 있다.

여기서 분자인 의 내적은 (0*1 + 1*0 + 1*2 + 0*0) = 2이다. 분모인 두 벡터의 크기와 크기의 곱은 아래와 같다.

따라서  책 A와 책 B의 코사인 유사도는,

다른 두 책들 사이의 코사인 유사도도 동일한 방법으로 계산할 수 있다. 온라인 서점의 컴퓨터는 책 A와 코사인 유사도가 가장 큰 책을 추천할 것이다.

 

데이터과학을 위한 수학 복습(1)

수학 지식 없이 데이터과학을 배울 수 있다는 주장은 거짓이다. 하지만 다행스런 점은 대다수의 데이터과학자들에게 높은 수준의 수학이 꼭 필요한 것은 아니라는 사실이다. 대부분의 실무자들에게는 모형이나 알고리즘을 이해하는 정도의 수학이 필요한 데 그것은 고등학교 수준의 수학을 잘 기억하고 있으면 대체로 충분하다.

뭐니뭐니 해도 데이터과학에 꼭 필요한 수학 지식은 선형대수(linear algebra)이다. 즉, 벡터(vector)와 행렬(matrix)이다. 그 중 아마도 벡터가 기본일 것이다.

많은 문과 전공자들에게 벡터는 넘사벽이다. 그게 일반적인 수(number)의 세계가 아니기 때문이다. 일반적인 수가 크기만을 나타내는데 비해 벡터는 ‘크기’와 ‘방향’을 가진 특별한 수이며, 순서와 의미를 지닌 숫자의 목록(list of numbers)이다. 다시 말해 벡터는 기하적 성격(geometric expression)을 갖고 있다. 그래서 벡터를 공부할 때 수적 표현의 기하적 의미(좌표상의 표시)를 새기면서 하면 크게 도움이 된다.

예컨대 학생들의 성적을 매기는데 국어와 영어 과목이 있다고 하자. 한 학생이 취득한 점수를 (국어 점수, 영어 점수)라는 벡터로 표현하기로 약속하자.  만약  학생 A의 성적이 국어=80, 영어=90이라면, 열벡터로 나타내면 이라고 표기될 것이다. 그것은 과는 전혀 다른 의미를 갖는다. 이를 좌표상에 표시하면 아래 <그림 1>과 같다.

<그림 1> 좌표 평면(혹은 공간) 사례

선형대수에서는 거의 항상 벡터의 시작점은 원점(영점)이다(<그림 2>).

<그림 2> 원점(origin)이 영점인 벡터들

 

<그림 3>에서 좌표상의 점은, 점(point)으로 표현할 때는 (-2,3), 벡터로 표현하면 , x축에서 음으로 2만큼 가고 y축에서 양으로 3만큼 간 점이다(이하는 3Blue1Brown의 동영상 강의를 인용하였음). -2는 x성분, 3은 y성분이다.

<그림 3> 좌표상에서 벡터의 예

 

3차원 벡터라면 여기에 z축을 추가하면 된다.예컨대  는 x축에서 음으로 2, y축에서 양으로 3, z축에서 양으로 4만큼 간 벡터(점)이다.

벡터의 합()을 좌표의 이동으로 설명해 보자. 벡터 가 이고, 벡터 일 때 숫자상으로 이 두 벡터의 합()은  이다. 좌표상에서 벡터는 이동으로 볼 수 있다. 원점에서 만큼 이동하고(x축으로 1만큼 가서 y축으로 2만큼 간 점), 다음에 의 종점에서 만큼 이동(x축으로 3만큼 가서 y축으로 -1만큼 간다)해서 원점에서 새로운 벡터 (x축으로 4만큼 가서 y축으로 1만큼 간 점)이 생성된 것으로 볼 수 있다. 이는 원점을 영점에 고정시켜 놓아서 얻는 이점이다.

<그림 4> 벡터의 덧셈

 

이번에는 벡터에 수(scalar: 스칼라, 영어발음으로 스케일러)를 곱하는 셈(실수배임)을 좌표의 이동으로 설명해 보자. 아래 예들에서처럼 벡터에 수를 곱하면 벡터가 그 수의 곱만큼 늘어나거나 줄어든다(즉, scaling, 스케일링된다).

,  

<그림 5> 실수배의 사례

이와 같이 벡터, 벡터의 덧셈, 실수배 등을 좌표 평면(혹은 좌표 공간)에서의 이동으로 생각해보면 벡터의 계산이 훨씬 더 잘 이해될 것이다. 좌표를 상상하면서 아래 설명을 보자.

벡터의 상등: 두 벡터가 같다는 말로 각각의 성분이 동일하다는 의미. 그럴려면 벡터의 순서와 차원이 모두 같아야 한다.

벡터의 덧셈과 뺄셈:

 라고 할 때,

벡터 가 덧셈이 가능할 때 벡터의 덧셈에는 다음 성질들이 있다.

(1) 교환법칙: 

(2) 결합법칙: 

(3) 덧셈의 항등원 (영벡터)가 존재한다. 어떤 벡터에 를 더하면 자기 자신이 된다. 2차원 벡터의 항등원은 , 3차원 벡터의 항등원은 

(4) 의 덧셈에 대한 역원 가 존재: 

벡터 가 덧셈이 가능할 때 벡터의 실수배에는 다음과 같은 성질이 있다.

(1) 분배법칙: 

(2) 결합법칙: 

(3) 임의 실수와 영벡터의 곱은 영벡터: 

(4) 1은 벡터의 실수배의 항등원:

(5) -1과 주어진 벡터의 곱은 그 벡터의 역벡터(덧셈의 역원): 

Excel로 하는 미래 예측(4): 시계열 예측

지수평활화법(FORECAST.ETS)는 3차 평활화를 수행한다. 데이터 추동 예측에서 소개한 지수평활화가 1차 평활화라고 한다면 두 차례 더 평활화를 거치는 함수이다. ETS는 Exponential Triple Smoothing의 머리글자이다. 지수평활화(exponential smoothing)가 백색 소음을 잡아주는 평활화라고 한다면 2차 평활화는 추세(trend)를 반영하고, 3차 평활화는 계절성(seasonality)을 반영한다. 수식으로 표현하면 다음과 같다.

1차 지수 평활화는,

는 측정된 시계열 데이터이고, 는 예측된 시계열 데이터(시간 t에서 평활화된 값)이다. 전 시구간에서 예측된 값의 오류를 다음 시구간 값을 예측할 때 일정한 비율()로 반영해 주는 식이다.

2차 지수 평활화는 다음과 같이 표현될 수 있다.

 시점 t에서의 추세(trend)에 대한 최적의 추정치

는 기본 요인(base factor) 혹은 데이터 평활화 요인(data smoothing factor)으로 불리며  이다. 는 추세 평활화 요인(trend smoothing factor)라고 불리며  이다. 를 넘어서 예측하려면 다음 공식을 사용한다.

3차 지수평활화(multiplicative의 경우)는 아래와 같이 계산된다.

: 계절적 조정 요인의 시퀀스(the sequence of seasonal correction factors). 그것은 관찰이 진행 중인 사이클에서 어느 시점 t mod L에서 예측된 추세의 예상된 비율이다.

L: 계절적 변동 주기(cycle)의 길이

는 계절적 변동 평활화 요인(the seasonal change smoothing factor)이며,  를 넘어서 예측하려면 다음 공식을 사용한다.

지수평활법을 이론적으로 이해하기는 다소 어렵지만 엑셀로 실행하는 것은 쉽다. 아래 그림에서처럼 예측값을 넣으려는 셀에 =FORECAST.ETS를 치고, 예측시점(여기서는 A38), 표적변수 데이터(B2:B37), 관찰한 시점들(A2:A37)을 넣어주면 된다.

그 이후 여러 시점들에 대해 예측하려면 그 수식을 복사하면 된다.  값을 구하려면, 셀에 =FORECAST.ETS.STAT(B2:B37,A2:A37,1)을 넣으면 된다.  값은 =FORECAST.ETS.STAT(B2:B37,A2:A37,2)을,  값은 =FORECAST.ETS.STAT(B2:B37,A2:A37,3)을 넣으면 된다. 계절성 주기(L)를 알아내려면 =FORECAST.ETS.SEASONALITY(D2:D51,A2:A51)을 넣으면 된다. 이렇게 계산된 계절성 주기는 6이고, 알파 값은 0.126, 베타는 0.001, 감마도 0.001이다.

이상으로 표적변수의 시계열 데이터만으로 예측하는 시계열 예측(time series forecasting)의 다양한 모형과 함수를 이해하면서 엑셀로 구현해 보았다. 아마도 그 정도만 구현할 수 있으면 현업의 실무적 요구에 잘 대응할 수 있으리라 생각된다.

미래 예측이 어렵다면 그것은 도구의 문제가 아니라 상상력, 혹은 이론과 학습의 부족에서 먼저 그 원인을 찾아야 하지 않을까. 다행한 점은 고등학교 정도의 수학만 잘 구사할 수 있으면 대부분의 문헌과 강의를 이해할 수 있다는 것이다.

엑셀이 시계열 예측만 도와주는 것이 아니다. 선형회귀와 같은 지도학습모형에 의한 예측도 수행하게 해준다. 추가기능(add-ins)을 이용하면 유용한 미래 예측을 해낼 수 있다. 다음에는 그 가능성을 살펴보겠다.

Excel로 하는 미래 예측(3): 시계열 예측

지난 포스팅에서 시계열 예측 중 데이터 추동 예측을 소개했다. 이번에는 모형 추동 예측을 살펴보자. 표적 변수의 과거 데이터에 의존해서 미래를 예측한다는 점은 데이터 추동 예측의 경우와 동일하지만 모형 추동 예측은 단지 개별적 데이터들의 집합에만 의존하는 것이 아니라 데이터들로 만들어지는 변동의 형태를 미래 예측에 반영하는 방법이다. 예컨대 변동이 선형(linear)이라는 점을 고려할 수도 있고 아니면 변동의 주기성–계절적 부침이라고 한다–이나 상향적 경향–추세라고 한다–을 고려할 수도 있다.

아래 그림들을 보면, (a)의 경우는 주기성이 분명해 보이고 (b)의 경우는 주기성이나 트렌드가 보이지 않는다. (A)의 경우는 주기성을 반영해서 미래를 예측한다면 오류를 줄일 수 있을 것이다.

모형 추동 예측에서 가장 널리 쓰이는 것은 선형회귀 모형이다. 시계열 예측의 선형회귀 모형은 크게 두 가지를 생각할 수 있다. 하나는 시간(시구간)을 예측변수로 갖는 모형–단순회귀모형, 다른 하나는 표적변수의 과거값을 독립변수로 갖는 모형–자기회귀모형이다.

데이터에 계절성(seasonality)이 있으면 단순회귀모형의 적합 결과가 좋지 않다(위 그림 참조).  단순회귀모형의 그런 단점을 개선하는 데는 두 가지 방법이 있다. 하나는 다항회귀(polynomial regression)를 사용하는 방법이다. 시구간의 2차항이나 3차항을 추가하거나 사인, 코사인 함수를 포함한 항을 추가하여 다항회귀모형을 만든다.

다른 하나는 계열 데이터의 각 시구간에 더미변수를 도입하는 방법이다. 만약 12개의 시구간이 있다면 11개의 더미변수를 도입하면 된다(12월은 기준 범주가 되어 더미변수가 생략된다). 시간 변수를 포함해서 모두 12개의 독립변수를 지닌 회귀모형이 되며 각 더미변수는 계절성을 포착한다. (아래 그림 2개 참조)

자기회귀모형(Autoregressive model, AR 모형)은 지연 계열(lag series)에 적용되는 회귀모형이다. 측정된 데이터가 1년씩 미룬 지연(lag) 데이터 혹은 2년 지연 계열, 3년 지연 계열 등과 상당한 정도의 상관관계를 가지는 경우 자기상관관계(autocorrelation)이라고 부르며 예측과정에 활용할 수 있다. 자기상관이 존재할 때 자기회귀모형을 적용하는 것이 하나의 해법이 된다. 자기회귀 모형의 일반식은 다음과 같이 표시될 수 있다.

1차 지연계열 데이터만을 가진 자기회귀모형을 AR(1), 2차 지연계열 데이터를 가진 자기회귀모형은 AR(2) 등으로 표시한다(아래 그림 참조).

지연계열 데이터를 만드는 방법은 간단하다. 아래 그림에서처럼 원 데이터를 복사해서 한 칸(여기서는 1개월)을 아래로 내리거나(Lag_1), 두 칸을 내리거나(Lag_2), 세 칸을 내리면 된다(Lag_3). 아래 사진에서처럼 공통의 데이터(노란색 부분)를 가지고 상관관계를 구하거나 회귀모형을 적합하면 된다.

아래 그림에서 보듯이 Yt와 Lag_1의 자기상관은 0.487451, Yt와 Lag_2의 자기상관은 -0.13216, Yt와 Lag_3의 자기상관은 -0.45576으로, 자기회귀모형의 적합이 필요함을 시사한다. 상관분석과 회귀분석은 모두 엑셀의 데이터-데이터분석 기능을 사용해서 수행하였다. 회귀분석 결과를 보면, 결정계수가 0.7557로 위에서 본 단순회귀모형의 결정계수 0.1798보다 크게 향상되었다.

AR 모형은 정상 시계열 데이터(stationary time series data)인 경우에만 사용 가능하다. 정상 시계열 데이터란 추세(trend)와 계절성(seasonality)이 없고 백색 소음(white noise)만 있는 시계열 데이터이다(아래 그림 참조).

이 조건이 충족되기가 보기만큼 까다롭지는 않다. 약간의 변형만 가하면 비정상 시계열 데이터를 정상 시계열 데이터로 전환할 수 있기 때문이다.

정상성(stationarity)을 확보하는 흔한 방법은 차분(differencing)을 이용하는 것이다. 차분이란 아래 식처럼 금년도 값에서 전년도 값을 뺀 것을 말한다.

만약 그렇게 차분을 해서도 정상성을 확보하지 못하면  아래 식처럼 다시 한번 차분을 할 수 있다(제2차 차분, 차분 차수가 2).

비정상 시계열 데이터의 경우 차분을 사용하지 않고 엑셀이 제공하는 지수평활법 함수를 사용해도 좋다. 2016 엑셀은 예측 함수를 4가지 제공한다. 시구간만을 독립변수로 갖는 단순선형회귀 예측을 계산하는 함수인FORECAST.LINEAR, 지수평활법 예측을 계산하는 함수 FORECAST.ETS, 지수평활법의 95% 신뢰구간을 보여주는 FORECAST.ETS.CONFINT, 계절성의 주기를 보여주는 FORECAST.ETS.SEASONALITY, 세 가지 계수를 보여주는 FORECAST.ETS.STAT를 제공한다.

사용법은 간단하다. 단순선형예측의 경우 예측하려는 셀에 =FORECAST.LINEAR를 치고, 예측하는 날짜(여기서는 A38), 표적변수 데이터(여기서는 B2:B37), 데이터가 있는 날짜(여기서는 A2:A37)를 입력하면 된다. 그리고 그 이후 날짜에 대한 예측을 추가하려면 그 수식을 복사하면 된다. 지수평활법도 마찬가지이다.

FORECAST.ETS는 편리한 함수이나 약간 자세한 설명이 필요함으로 다음 포스팅에서 독립해서 다루겠다.