Panda Project


  panda(2010-03-24 05:32:43, Hit : 3727, Vote : 94
 [용어] 촐레스키 분해(Cholesky Decomposition)

질문 ]
촐레스키 분해와 촐레스키 펙트가 각각 어떤 의미를 지니고 있나요? 즉 결국 어떤 역할을 수행하는 것인지, 목적이 뭔지 설명 좀 부탁드립니다. 책을 봐도 개념이 확실히 정립이 안되네요

[ 답변 ]
Factorization은 인수분해라는 뜻이구요, decomposition이라고도 합니다. 그러니까 Cholesky Factorization도 무언가를 인수분해하는 방법인데요, 그 '무언가'에 해당하는 것이 Matrix입니다. 따라서 Cholesky Factorization은 Matrix를 인수분해하는 것인데, 그냥 'Matrix'에 root(제곱근)를 씌운 결과(물론 Matrix에 root를 씌우면 그 결과도 Matrix의 형태가 됩니다.)라고 생각하시면 쉽습니다.

예를 들어 볼까요?
'2'를 한번 분해해보죠. '2'를 동일한 숫자(Factor)의 곱으로 분해하면 2=root(2)*root(2)로 나타낼 수 있습니다. 마찬가지로 Matrix도 그와 같은 곱으로 나타낼 수 있는데 Matrix를 두 Matrix(Factor)의 곱으로 분해하게 되면 Matrix를 곱하는 방법이 일반적으로 숫자를 서로 곱하는 방식과는 다르므로,

Original Matix=Lower triangular matrix(Matrix 모양이 대각선을 중심으로 왼쪽 아래에만 숫자가 있고 대각선 위쪽은 원소가 모두 0인 행렬) * Upper triangular matrix(Lower triangular matrix의 열과 행을 바꾼 전치 행렬)로 분해할 수 있습니다.

리스크관리에서 Cholesky Factorization은 Monte Carlo Simulation에서 Random number를 추출할 때, 추출된 random number(random하니까 각 random number들간의 correlation은 0이겠죠?)간의 correlation이 0이 아니라 '원하는 correlation'을 가지도록 random number를 수정할 때 사용합니다.
대략적으로 말씀드리면 추출된 random number들(따라서 Correlation=0)의 matrix에 위 Original matrix(risk factor들간의 실제 correlation matrix)를 분해하여 나온 Lower triangular matrix를 곱하면, 서로간의 correlation이 0인 random number들을 원하는 correlation구조를 가지는 random number들로 바꿀수 있습니다.

[출처] 촐레스키 인수분해|작성자 임채창

======================================================

다음은 이를 이용한 세 개의 자산가격 시뮬레이션 결과이다. 자산A와 B의 상관계수를 0.9로 준 결과 차트에서도 두 자산은 매우 친하게 움직이고 있다.

난데없이 차트를 보여주며 상관계수가 어쩌고 저쩌고 하는 것은 촐레스키 분해를 이용한 몬테 카를로 시뮬레이션을 끄집어 내려는 것이다. Cholesky Decomposition 또는 Cholesky Factorization은 상관관계를 가지는 2개 이상의 난수를 만들고자 할때 이용한다. 몬테카를로 시뮬레이션에 대한 글을 보면 대개 하나의 난수를 박스뮬러법 등등으로 생성하여 시뮬레이션을 하는 것이 대다수이다. 그러나 ELS와 같은 multi-asset의 경우 자산간의 상관관계를 고려하여 난수를 뽑아내어야 한다. 자산간에 상관관계가 0이라면 모를까...? 암튼 Cholesky Decomposition에 대한 정의를 보면 Given a symmetric positive definite matrix A, the Cholesky decomposition is an upper triangular matrix U such that A = transpose(U)U.

A=UTU

다음의 코드는 상관계수행렬을 매개변수로 촐레스키분해를 하는 vbnum.com에서 가져온 것이다.
Function Cholesky(Mat As Range)    Dim A, L() As Double, s As Double    A = Mat    n = Mat.Rows.Count    M = Mat.Columns.Count    If n <> M Then        Cholesky = "?"        Exit Function    End If        ReDim L(1 To n, 1 To n)    For j = 1 To n        s = 0        For k = 1 To j - 1            s = s + L(j, k) ^ 2        Next k        L(j, j) = A(j, j) - s        If L(j, j) <= 0 Then Exit For        L(j, j) = Sqr(L(j, j))                For i = j + 1 To n            s = 0            For k = 1 To j - 1                s = s + L(i, k) * L(j, k)            Next k            L(i, j) = (A(i, j) - s) / L(j, j)        Next i    Next j    Cholesky = LEnd Function난수생성은...






[용어] PIR과 HAI, 가구수, 주택수
[관심자료] 튜링의 사과와 애플컴퓨터

Copyright 1999-2024 Zeroboard / skin by zero
  copyright ⓒ 2005 ZIP365.COM All rights reserved