sobota, 10 lutego 2024

Stopa zwrotu - zaczynamy

Ta praca odzwierciedla zainteresowanie autora analizą finansową i wykorzystaniem narzędzi informatycznych w jej realizacji. Niniejszy blog nie ma na celu dostarczania porad finansowych, lecz stanowi konstruktywne podejście autora do dzielenia się wiedzą. Autor widzi w tym sposobność do rozwijania swoich umiejętności i zachęcania do wzajemnej dyskusji. Należy pamiętać, że wnioski wynikające z analiz prezentowanych na tym blogu nie powinny być bezpośrednio stosowane do podejmowania decyzji finansowych. Nawet jeśli analizy są dokładne, stanowią one tylko fragment potrzebnych informacji do podjęcia w pełni świadomej decyzji. Brak szerszego kontekstu, w którym znajduje się potencjalny inwestor lub decydent, może prowadzić do niepełnych wniosków.

Dziś rozpocznę nowy projekt. Będzie dotyczył obliczania Stopy Zwrotu. W poprzednim wpisie ( https://kamilkondrat.blogspot.com/2024/02/analiza-sentymentow-danych-giedowych_6.html ) zakończyłem opisywanie wszystkich elementów środowiska, które miały nam służyć do analizy sentymentów. Postanowiłem, że zrobię jednak mały krok w bok i na razie odpuszczę ten projekt, z tego względu, że opiera się o użycie sztucznej inteligencji. 

Generalnie bardzo mi się podoba obszar AI, czytając i zagłębiając się w te wszystkie biblioteki i działanie tych różnych warstw i różnych mechanizmów sterujących uczeniem maszynowym, trenowaniem modeli itp... natknąłem się na, w moim mniemaniu, bardzo wciągające i pomysłowe rzeczy. To jest naprawdę kierunek wart eksploracji i ja na pewno do tego wrócę, natomiast moim celem nie jest bycie stricte znawcą AI, a analitykiem danych w obszarze finansów dla którego AI będzie wsparciem.

Bycie kompetentnym analitykiem danych finansowych wymaga zrozumienia świata finansów i ekonomii oraz umiejętności analizy danych jako takich bez AI, a dopiero potem można w sensowny sposób rozszerzać to o stosowanie machine learningu, tak to widzę.

Dlatego też, zaczynamy:

import pandas as pd
import yfinance as yf

Miałem okazję omawiać te moduły na tym blogu, jednak uważam, że mimo wszystko warto się odnieść jeszcze raz w celu przypomnienia i/lub podkreślenia jakiejś szczególnej cechy.

"Pandas" - to bardzo popularna i bardzo bogata biblioteka obfitująca w różne narzędzia służące do obróbki danych, w analizie danych. Nie zawiera rozwiązań z obszaru sztucznej inteligencji. Natomiast pozwala na wiele "zwykłej" analizy danych i ewentualne przygotowanie danych pod dalszą analizę danych z z zastosowaniem modeli uczenia maszynowego. 

Na szczególną uwagę zasługują struktury danych takie jak "Series" i "DataFrame." "Series" jest jednowymiarową tablicą etykietowanych danych, a upraszczając tę definicję jest to prosta lista, gdzie po przecinku mamy jakieś wartości. Taki format danych odpowiada wektorowi numerycznemu, jeśli umieścimy to w kontekście pracy z AI.

DataFrame - to jest super ważny element. DataFrame, który możemy tłumaczyć jako Ramka Danych, to z kolei dwuwymiarowa struktura danych składająca się z wierszy i kolumn, gdzie każda z kolumn może być innym typem danych, a to odzwierciedla na przykład tabelę w bazie danych stworzoną w SQL.

"Yfinance" - jest biblioteką do pobierania danych finansowych ze strony Yahoo Finance...

df = yf.download("VWSYF", period="5y")

Ja wybrałem spółkę Vestas Wind Systems (o symbolu "VWSYF", co zostało użyte w kodzie), to Duńska firma specjalizująca się w produkcji, instalacji i serwisie turbin wiatrowych. Nie ma nic szczególnego w tym wyborze, możecie wybrać dane jakie chcecie lub podążać za przykładem, jeśli się uczycie.

Obliczmy podstawową stopę zwrotu:

df['simple_return'] = (df['Adj Close'] / df['Adj Close'].shift(1)) - 1

Tworzymy nową kolumnę "simple_return" i dzięki operatorowi przypisania "=" zapisujemy w niej wynik dzielenia ceny zamknięcia z danego dnia "Adj Close" przez cenę zamknięcia z dnia poprzedniego. 

Metoda "shift(1)" pozwala nam sięgnąć cenę zamknięcia o jedną wyżej w wierszach danej kolumny, to ta metoda właśnie sprawia, że faktycznie sięgamy po wartość z poprzedniego dnia lub też możemy powiedzieć, że wartość, która jest wyżej "spada" nam o jedną na dół - zależy od interpretacji...

"-1" pozwala nam odjąć to co mamy "przed przecinkiem" i zostaje nam wartość dziesiętna, którą możemy zamienić sobie na wskaźnik procentowej zmiany wartości względem dnia poprzedniego. 

Wszystko to będzie oczywiście działać kiedy dane będą posortowane rosnąco, czyli w naszej ramce danych daty wcześniejsze będą wierszami, które są wyżej. Warto zauważyć, że w taki sposób pandas sortuje dane automatycznie, dobra nasza.

W związku z tym, że nie chcę robić jakichś rozwiązłych wykładów, a w miarę prostym językiem zaciekawiać i uczyć małymi dawkami (tłumacząc przy tym rzeczy samemu sobie) kończę już ten wpis i do zobaczenia.

Brak komentarzy:

Prześlij komentarz

Analiza sentymentów - wpisy na mediach społecznościowych (podział danych)

Ten wpis zaczniemy od stworzenia DataFrame z danymi treningowymi train_df = pd.read_csv('train.csv', encoding='ISO-8859-1')....