상관계수(Correlation Coefficient)는 두 자산의 가격이 같은 방향으로 움직이는지, 반대로 움직이는지를 숫자 하나로 압축한다. +1이면 완전히 같은 방향, -1이면 완전히 반대 방향, 0이면 관계가 없다는 뜻이다. 개별 종목을 볼 때 이 지표를 쓰는 이유는 단순하다. 그 종목이 시장 전체와 같이 움직이는 종목인지, 시장과 무관하게 자기 갈 길을 가는 종목인지를 구분하기 위해서다.

우리금융지주를 고른 이유는 통념 때문이다. 은행지주는 금리·환율·경기 민감도가 커서 코스피 지수와 가장 강하게 같이 움직이는 업종으로 꼽힌다. 그런데 이번에 모은 50거래일 데이터를 먼저 눈으로 보면 그 통념과 반대되는 그림이 나온다. 같은 기간 KOSPI 지수를 그대로 추종하는 KODEX KOSPI(226490) ETF는 고점 대비 37.71% 빠졌는데, 우리금융지주는 오히려 14.29% 올랐다. 시장이 무너지는 동안 홀로 오른 종목의 상관계수가 실제로 얼마나 낮았는지, 혹은 마이너스로 돌아섰는지를 직접 계산해서 확인해볼 만한 구간이다.

이 글의 데이터 범위
종목      우리금융지주 (KRX:316140)
비교자산    KODEX KOSPI (KRX:226490, KOSPI 지수 추종 ETF)
구간      2026-06-25 ~ 2026-09-04, 50거래일
출처      stockanalysis.com 일봉
--------------------------------------------------
우리금융 종가(시작→끝)  29,050원 → 33,200원 (+14.29%)
우리금융 최고/최저  34,800원(08-07) / 28,350원(06-26)
KOSPI ETF 종가(시작→끝)  92,245원 → 68,710원 (-25.51%)
KOSPI ETF 최고/최저  92,245원(06-25) / 57,455원(07-30)

이 글은 투자 권유가 아니다. 계산 과정과 결과를 있는 그대로 적을 뿐, 매수·매도를 권하지 않는다.

계산: 상관계수는 어떻게 나오는가

상관계수는 두 시계열의 공분산을 각자의 표준편차로 나눠서 -1과 +1 사이로 정규화한 값이다. 이번 글에서는 numpy로 직접 구현했다. 라이브러리에 들어있는 corrcoef 함수를 쓰지 않고, 평균을 빼고 곱하고 나누는 계산을 그대로 코드로 옮겼다.

상관계수 계산식
공식    r = Cov(X, Y) / (Std(X) × Std(Y))
--------------------------------------------------
X      우리금융지주 종가, 최근 N거래일
Y      KOSPI ETF 종가, 같은 N거래일
Cov    두 시계열에서 각자 평균을 뺀 값끼리 곱한 뒤 평균
Std    각 시계열에서 평균을 뺀 값을 제곱해 평균 낸 뒤 제곱근 (모집단 기준)
범위    -1(정반대) ~ 0(무관) ~ +1(완전 동조)

창(window) 길이는 20일을 기본값으로 삼는 경우가 많아서 우선 20일로 계산했다. 그런데 지금 손에 쥔 데이터가 50거래일뿐이라 20일 창을 쓰면 앞의 19일은 값이 안 나오고, 유효한 값은 31개만 남는다. 신호를 세어 비교하기에는 표본이 너무 얇았다. 그래서 이번 글의 기본 창은 10일(약 2주)로 잡았다. 41개의 유효값이 나와 표본이 두 배 가까이 늘었고, 대신 더 짧은 흐름에 민감하게 반응하는 대가를 치른다. 20일과 30일 결과는 뒤에서 민감도 비교로 따로 보여준다.

먼저 두 자산의 가격 흐름을 그대로 겹쳐보면 이렇다.

우리금융지주 일봉

우리금융지주 vs KOSPI ETF 정규화 비교

시작일 종가를 100으로 맞춰 지수화하면 두 선이 갈라지는 그림이 뚜렷하다. 우리금융지주는 7월 초반 살짝 흔들린 뒤 꾸준히 우상향해 8월 7일 120에 근접했다가 소폭 눌린 채 114 부근에서 마감했다. KOSPI ETF는 6월 말부터 내리 빠지다 7월 30일 62.2까지 떨어졌고, 이후 반등했지만 9월 4일에도 74.5에 머물렀다. 같은 50일을 통째로 놓고 종가 수준끼리 상관계수를 계산하면 -0.72가 나온다. 두 자산이 거의 정반대로 움직였다는 뜻이다.

다만 이 -0.72는 조심해서 읽어야 한다. 가격 수준(레벨) 자체를 상관계수에 넣으면, 한쪽이 꾸준히 오르고 다른 쪽이 꾸준히 내리는 추세만 있어도 실제 하루하루의 동조 여부와 무관하게 강한 음의 값이 나온다. 그래서 일별 등락률(수익률)로 바꿔서 같은 50일을 다시 계산해봤다. 결과는 +0.16, 약한 양의 상관이다. 레벨로 보면 강한 음의 상관, 등락률로 보면 약한 양의 상관. 같은 두 자산, 같은 기간인데 무엇을 넣느냐에 따라 부호까지 바뀐다. 이 지표를 쓸 때 레벨과 수익률 중 무엇을 넣었는지부터 밝혀야 하는 이유다.

실측: 10일 창 상관계수와 교차 신호

10일 창으로 굴린 상관계수는 7월 8일 -0.71에서 시작해 7월 24일 +0.64까지 치솟았다가 다시 8월 21일 -0.55까지 내려가는 등 널뛰었다. 0선을 여섯 번 넘나들었다.

상관계수(10일)와 0선 교차 신호

상관계수가 0선을 위로 뚫으면(상향교차) “두 자산이 다시 같은 방향으로 움직이기 시작했다"는 뜻으로, 아래로 뚫으면(하향교차) “탈동조화가 시작됐다"는 뜻으로 읽을 수 있다. 이 해석이 실제로 다음 거래일의 방향까지 맞혔는지 여섯 번 전부 대조했다.

교차일방향상관계수다음 거래일우리금융 등락KOSPI ETF 등락방향신호
07-15상향(동조 예측)+0.0107-16+0.64%-6.54%불일치실패
07-16하향(탈동조 예측)-0.0407-20-3.02%-4.06%일치실패
07-20상향(동조 예측)+0.2407-21-0.16%+3.06%불일치실패
07-28하향(탈동조 예측)-0.1107-29+0.94%-7.06%불일치적중
08-06상향(동조 예측)+0.1208-07+3.88%-0.25%불일치실패
08-13하향(탈동조 예측)-0.3808-14+1.20%+2.48%일치실패

여섯 번의 교차 중 다음날 방향까지 맞은 건 7월 28일 하향교차, 단 한 번이다. 나머지 다섯 번은 교차 직후 오히려 정반대 흐름이 나왔다. 특히 08-06 상향교차 다음날은 우리금융이 3.88% 뛰었는데 KOSPI ETF는 거의 움직이지 않아(-0.25%), “동조가 시작됐다"는 신호가 나온 바로 다음날 두 자산이 가장 따로 놀았다. 상관계수의 방향 전환을 다음날 트레이딩 신호로 바로 쓰기에는 근거가 얇다는 뜻이다.

민감도: 창을 늘리면 교차가 사라진다

같은 두 시계열에 창 길이만 10일, 20일, 30일로 바꿔 계산하면 결론이 상당히 달라진다.

파라미터 민감도: 10일/20일/30일 창 비교

창 길이유효값 개수0선 교차 횟수평균 상관계수최댓값최솟값
10일41개6회-0.16+0.64-0.71
20일31개2회-0.37+0.03-0.67
30일21개1회-0.41+0.05-0.77

창이 길어질수록 값이 부드러워지면서 대부분의 구간에서 음수에 머문다. 20일 창은 8월 24~25일 이틀만 아주 살짝 양수(+0.03, +0.01)로 올라갔다가 다시 가라앉았고, 30일 창은 맨 마지막 거래일에 딱 한 번 +0.05로 올라섰을 뿐이다. 짧은 창은 신호가 많이 나오지만 다음날 성적이 나빴고(1/6), 긴 창은 신호 자체가 거의 나오지 않아 애초에 검증할 표본이 부족하다. 창 길이를 무엇으로 잡든 “우리금융과 KOSPI ETF는 이 구간 내내 약하게 반대로 움직였다"는 결론 자체는 바뀌지 않지만, 그 결론을 근거로 매매 타이밍을 잡을 만한 교차 신호는 창을 늘릴수록 사라진다.

봇 게이트에 넣을 것인가

이 지표를 자동매매 게이트에 그대로 넣기는 어렵다고 판단했다. 첫째, 레벨 기준과 수익률 기준의 부호가 반대로 나올 정도로 정의에 민감하다. 게이트에 넣으려면 둘 중 하나를 미리 정해야 하는데, 이번 데이터만 보면 어느 쪽이 “맞는” 정의인지 판단할 근거가 없다. 둘째, 다음날 방향 예측으로 써봤을 때 여섯 번 중 다섯 번이 틀렸다. 표본이 6건뿐이라 통계적으로 단정하기는 이르지만, 적어도 이 구간에서는 신뢰할 신호가 아니었다. 다만 특정 국면(지수와 개별 종목이 장기간 반대로 가는지, 같이 가는지 확인)을 사후에 짚어보는 서술적 지표로는 쓸모가 있었다. 우리금융지주가 시장 급락에 별로 흔들리지 않았다는 사실은, 상관계수를 계산하기 전에는 이렇게 숫자로 확인하지 못했다.

남기는 것

이번 구간에서 가장 눈에 띄는 건 상관계수의 절댓값보다 부호가 정의에 따라 뒤집힌다는 점이었다. 레벨로 보면 -0.72, 수익률로 보면 +0.16. 같은 지표 이름을 쓰면서 계산 대상만 바꿔도 결론이 정반대가 될 수 있다는 걸 숫자로 보고 나니, 앞으로 이 지표를 언급하는 글은 어느 쪽을 썼는지부터 밝혀야겠다는 생각이 들었다.

윌리엄 오닐은 시장 전체의 흐름을 거스르는 종목을 조심하라고 했다. 이번 구간의 우리금융지주는 그 조언과 반대로, 시장이 무너지는 동안 홀로 올라간 종목이었다. 그 상승이 이 지표로 미리 걸러낼 수 있는 종류의 강세였는지, 아니면 그저 이번 50거래일에 한정된 우연이었는지는 다음 라운드에 같은 종목을 다시 만났을 때 확인할 숙제로 남겨둔다.

이 글은 투자 권유가 아니며, 언급된 수치는 모두 stockanalysis.com에서 수집한 일봉을 직접 계산한 결과다.

약어 풀이

  • 이 글에 나온 영어 약어를 풀어 둔다.
  • ETF (Exchange Traded Fund): 상장지수펀드. 특정 지수나 자산을 추종하도록 만들어 주식처럼 거래소에서 사고파는 펀드다.
  • KOSPI (Korea Composite Stock Price Index): 코스피, 한국거래소 유가증권시장에 상장된 종목 전체를 대상으로 산출하는 종합주가지수다.
  • KRX (Korea Exchange): 한국거래소. 코스피·코스닥 등 국내 주식시장을 운영하는 거래소다.
  • KODEX (Korea Index): 삼성자산운용이 운용하는 국내 ETF 브랜드명. 이 글에서 쓴 KODEX KOSPI(226490)가 여기 속한다.