최적화 살짝 들여다보기 with python scify

in #dclick6 years ago

최적화의 개념

두 자산을 이용하여 투자의사결정을 하는 경우, 각 자산의 비중의 합은 1이 되어야 하므로 실질적으로 1개의 변수를 다루는 일이 된다. 즉, 아래와 같이 W2는 W1 에 관한 식으로 바꿀 수 있으므로 W1 만 결정하면 W2는 자동으로 계산된다.

W1 + W2 = 1
W2 = W1 - 1

1개의 변수를 가진 목표함수는 초/중/고에서 배운 방정식을 이용하면 쉽게 풀 수 있다. 하지만 투자자산의 갯수가 n개로 늘어나게 되면 얘기가 조금 달라진다. 우리가 배운 수식으로는 원하는 비중값을 쉽게 찾아낼 수가 없다. 따라서 최적화 기법이 필요해진다.

최적화란 간단히 말하면 random한 숫자들을 반복하여 넣어보고 그 중 가장 좋은 결과물을 답으로 정하는 방법이다. 예를 들어 X+2 = 5일때, X에 알고 있는 모든 숫자를 다 넣어보고 답을 결정하는 것이다. 하지만 이는 매우 비효율적인 방법이다.

보다 효율적으로 답을 찾기 위해서는 특정 숫자를 넣었을때 나오는 결과값의 방향을 보고 다음번의 숫자를 결정하는 것이 필요하다. 1보다 2를 넣었을때 정답에 가까워졌다면, 다음번에는 2보다 큰 숫자를 넣는 식이다. 그 다음 중요한 것은 넣는 숫자의 간격이다. 1과 1.5를 넣어본 다음 그차이를 보고 다음 숫자의 간격이 충분히 넓어도 된다고 판단되면 2.5나 3을 넣어보는 것이 효율적이다.

이런 방법으로 최초의 숫자에서 방향과 간격을 정하면서 한발씩 나아가면서 가장 적합한 숫자를 찾는 것이 바로 최적화 방법이다. 수학적으로는 방향과 간격을 정하기 위해 1차 편미분(그레디언트)과 2차 편미분(헤시안)을 이용한다. 다양한 최적화 방법론은 가장 합리적인 방향과 간격을 찾는 것에 대한 것이다.


파이썬 알고리즘

Python의 Scipy는 과학자와 공학자를 위한 라이브러리로 다양한 함수 및 알고리즘을 제공한다. 그중 Optimization은 최적화를 위한 함수(minimize)를 제공한다. Minimize는 다음의 최적화 알고리즘 들을 이용할 수 있게 해준다. 제공하는 최적화 알고리즘은 다음과 같다.

image.png
[출처 : https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html]

이 중 대표적으로 사용되는 다음의 알고리즘에 대해서 아주X10 간단히 알아보자.

BFGS알고리즘

BFGS라는 명칭은 해당 방법론을 논문으로 써낸 4명의 이름 앞자를 딴 것이다. 위에서 언급했던 바와 같이 최적화를 위해서는 방향과 간격을 정하는 것이 중요하고 그 과정에서 그레디언트와 헤시안이 필요하다. 하지만 헤시안이라는 것을 계산하는데는 엄청난 컴퓨팅파워(자원)이 소모된다. 따라서 헤시안과 유사하지만 계산이 좀 더 용이한 값을 대신 이용하는 방법이 바로 BFGS다. BFGS의 특징은 제약조건(constraint)가 없는 조건에서 사용가능하다는 것이다.

SLSQP알고리즘

복잡한 문제를 단순화 하며 풀기 위해, 2차방정식으로 근사하여 문제를 풀고 다음번 지점을 예측하여 다시 동일한 방법을 수행하는 방식으로 최적점을 찾는 방법이다. SLSQP의 특징은 제약조건(constraint)와 상하한선(bound)가 있는 조건에서 사용가능하다는 것이다.


최적화에 대해 공부해보고자 하였으나, 생각보다 광범위한 방법론과 수학적 지식이 필요하여 짧은시간내에 일정수준에 도달하는 것에 한계를 느꼈다. 좀 더 자세히 최적화 방법론에 대해 알기 위해서는 시간을 두고 기초부터 알아볼 필요가 있을 것 같다.


Sponsored ( Powered by dclick )
스팀헌트 스팀증인 출사표

오늘 스팀헌트가 스팀증인에 출사표를 던지며, 스팀 증인으로서 저희가 달성하고자 하는 목표와 철...

logo

이 글은 스팀 기반 광고 플랫폼
dclick 에 의해 작성 되었습니다.

Sort:  

안녕하세요.^^ 글을 잘 쓰시네요~

노력중입니다. 다른분들에 비하면 아직 멀었죠^^
스팀잇에서 좋은 활동 기대하겠습니다~

Coin Marketplace

STEEM 0.19
TRX 0.17
JST 0.030
BTC 79661.72
ETH 3161.64
USDT 1.00
SBD 2.77