sobota, 12 grudnia 2009

Rozwiązywanie problemu Markowitza metodą Lagrange'a

Problem Markowitza był następujący: Najpierw zauważmy, że warunki ograniczające zawierają te same zmienne niezależne (tutaj wagi portfelowe), co funkcja celu, czyli wariancja portfela. Gdybyśmy znaleźli związek pomiędzy funkcją celu a warunkami ograniczającymi, to moglibyśmy zapisać cały układ równań w jedną funkcję zależną od udziałów akcji. Jeśli warunki ograniczające zapiszemy w postaci: to funkcję Lagrange'a zapisujemy jako: gdzie lambda(1) i lambda(2) to pewne dodatkowe zmienne sztuczne. A zatem funkcja Lagrange'a to pierwotna funkcja - wariancja, ale z pewnymi warunkami brzegowymi, które po prostu zostają dodane do tejże funkcji. 
Wiadomo, że ekstremum funkcji znajduje się w punkcie, w którym pochodna tej funkcji wynosi zero.   
Funkcję Lagrange'a różniczkujemy względem każdej zmiennej, a pochodne przyrównujemy do zera, co daje nam układ macierzy: Ogólnie rzecz ujmując tworzymy gradient funkcji Lagrange'a - wektor pierwszych pochodnych funkcji - oznaczany gradL, który musi być równy wektorowi zerowemu (gdyż każdą pochodną przyrównujemy do zera) - musi zostać spełniony warunek istnienia gradientu zerowego. Z powstałego układu wyliczamy poszukiwane wagi portfela. Przykład. Zróbmy przykład dla k=3. Weźmy te same parametry rozkładów rozważanych aktywów przy opisie portfela trzech akcji, czyli: oraz tę samą macierz kowariancji stóp zwrotu: Załóżmy, że oczekiwana stopa zwrotu z portfela wynosi 8,2%. Poprzednio widzieliśmy, że stopę tę otrzymaliśmy po podstawieniu wag x(A)=0,5; x(B)=0,3; x(C)=0,2 do wzoru na oczekiwaną stopę zwrotu. Następnie wagi te podstawiliśmy do wzoru na wariancję, która wyniosła 6,54, zaś ryzyko 2,56%. Tym razem możemy zrobić odwrotnie: sprawdzić, przy jakich wagach dostaniemy oczekiwaną stopę zwrotu, aby uzyskać minimalne ryzyko. Tworzymy funkcję Lagrange'a: a następnie jej gradient, który dla trzech walorów w ogólnym przypadku przyjmuje postać: W danym przypadku gradient wygląda następująco: Należy teraz rozwiązać powstały układ równań. Są dwie alternatywne techniki jakimi warto się posłużyć. 1. Posługujemy się programem, który potrafi rozwiązywać układy równań. Ja dałem obliczyć to Maple. Napisałem w nim układ pochodnych pierwszego rzędu przyrównanych do zera (co powoduje także, że powracamy do pierwotnych warunków ograniczających): L1 i L2 oznacza odpowiednio lambda(1) i lambda(2). Maple oblicza wynik przy zastosowaniu formuły solve: A więc wagi są niemal identyczne jak te, gdy liczyliśmy odwrotnie (podstawialiśmy wagi do wzorów). Różnice wynikają - jak mi się zdaje - z tego, że rachunek różniczkowy posługuje się granicami funkcji. Z tego powodu wariancja minimalnie także się różni i jej wynik to 6,5299, zaś ryzyko 2,555. 2. Druga technika jest trudniejsza w tym sensie, że wymaga większego zaangażowania umysłowego. Z drugiej strony do jej użycia wystarcza zwykły arkusz kalkulacyjny. W zróżniczkowanym i przyrównanym do zera układzie równań znajdujemy rozwiązanie - wektor x. Jest ono już nam znane z poprzedniego wykładu: Widać, że jest potrzebna umiejętność odwracania macierzy. Ogólnie nie jest to łatwa sprawa, ale teoria nie jest nam zbytnio potrzebna. Staje się to banalne dzięki funkcjom zawartym w arkuszu kalkulacyjnym. W Excelu robimy tak: 1. Zaznaczamy w jakimś wolnym miejscu tyle wierszy i kolumn ile zawiera macierz, którą chcemy odwrócić, 2. Wybieramy funkcję MACIERZ.ODW, 3. Zaznaczamy tablicę, czyli macierz, którą odwracamy, 4. Naciskamy kombinację klawiszy ctrl+shift+enter. W podanym rozwiązaniu jest istotny niuans, na który należy zwrócić uwagę. W zwykłej wersji układu równań i gradiencie macierz kowariancji jest przemnożona przez 2. Można pozbyć się tej dwójki. W powyższym wzorze na x "siedzą" lambda(1) i lambda(2). Normalnie obie powinny być przemnożone przez 2. Ale same lambdy są zmiennymi sztucznymi, które nas nie interesują i możemy zawrzeć w nich liczbę 2, co powoduje, że 2 znika. Ale ciągle rozwiązanie zależy od lambda(1) i lambda(2), które są nieznane. Te zaś mogą zostać teraz wyznaczone z warunków: Wprowadzając oznaczenia: otrzymujemy: W zasadzie oprócz odwracania macierzy należy wiedzieć jeszcze jak się mnoży macierze, ale też używamy do tego funkcji w Excelu, więc to prosta sprawa. Odpowiednie parametry podstawiłem do wzoru, w języku macierzowym, w Excelu. Wyniki dostałem następujące: x(1)=0,485; x(2)=0,322; x(3)=0,1925; lambda(1)=-10,19; lambda(2)=2,039. A więc wagi portfela są dokładnie te same, co wyliczył Maple, zaś lambdy zmniejszone dwukrotnie oraz z przeciwnymi znakami. Wynika to z faktu, że lambdy zostały poprzekształcane. 
...........................................................
 Po znalezieniu rozwiązania ostatnią, choć w rzeczywistości do pominięcia sprawą (zaraz powiem dlaczego), jest sprawdzenie warunku wystarczającego istnienia ekstremum funkcji. Rozwiązując zadanie znaleźliśmy jedynie wagi portfela, dla których gradient pewnej funkcji jest zerowy. Nie tylko wcale nie wiemy czy znaleźliśmy minimum czy maksimum funkcji celu, ale czy w ogóle jakiekolwiek ekstremum. Najpierw na podstawie gradientu konstruujemy hesjan obrzeżony, którego elementami są pochodne rzędu drugiego po wszystkich zmiennych. Stosując podstawienia na lambdach gradient funkcji Lagrange'a jest postaci: Szybko zauważymy, że hesjan obrzeżony wygląda tak samo jak gradient, z tą różnicą, że nie pojawia się już pierwszy wektor zmiennych, a więc ma postać: A zatem hesjan obrzeżony jest to macierz kowariancji z "doczepionymi" na brzegach wektorami. Po podstawieniu danych hesjan obrzeżony ma postać: Następnie obliczamy tzw. minory główne, czyli wyznaczniki podmacierzy leżące na przekątnej głównej. Na temat wyznaczników macierzy jest duża literatura w internecie, więc każdy może po nią sięgnąć. Ich obliczanie nie jest proste dla dużych macierzy, więc oczywiście posługujemy się znowu funkcjami zawartymi w arkuszu kalkulacyjnym. W Excelu obliczenie wyznaczników jest bardzo proste: 1. wybieramy komórkę, w której wyświetli się obliczony wyznacznik, 2. wybieramy funkcję WYZNACZNIK.MACIERZY, 3. zaznaczamy tablicę, czyli macierz, dla której liczymy wyznacznik, 4. Potwierdzamy. Następnie badamy znaki kolejnych minorów głównych. Korzystamy z twierdzenia, że warunkiem wystarczającym istnienia minimum warunkowego jest, aby minory hesjanu obrzeżonego stopnia m+1, m+2,... n miały takie same znaki jak (-1)^m, gdzie m to liczba warunków ograniczających. Dla maksimum warunkowego minory winny zmieniać znaki (dla minora stopnia m+1 znak taki jak dla (-1)^(m+1)). U nas m=2. Nasz minor obrzeżony stopnia m+1=n, czyli 3 wynosi 721>0 i jest to jedyny minor do policzenia (obrzeżoność zmienia pojęcie stopnia - wyznacznik zwykłego hesjanu byłby stopnia 5-tego, ale dla hesjanu obrzeżonego jest to 3 - jako efekt pojawiania się macierzy zerowej, której wyznacznik jest zawsze zero, zatem i stopnień jest zerowy). (-1)^2 > 0. A zatem w tym punkcie istnieje minimum. W rzeczywistości istnieje twierdzenie, zgodnie z którym ekstremum warunkowe wariancji zawsze będzie stanowiło minimum [zob. Markowitz, H., "The optimization of a quadratic function subject to linear constraints", 1956]. Zagadnienie minimalizacji wariancji sprowadza się więc tylko do obliczenia wag portfela na podstawie funkcji Lagrange'a. Ten luksus wynika z faktu, że dla takich ograniczeń jakie wprowadziliśmy, nie istnieje maksymalna wariancja. Twierdzenie o warunku wystarczającym istnienia minimum warunkowego może się jednak przydać w bardziej skomplikowanych problemach. 
...........................................................
W następnej części spróbuję zastosować teorię Markowitza do rzeczywistych, aktualnych danych z GPW. Ciekawe, co z tego wyjdzie.

Brak komentarzy:

Prześlij komentarz