기본 콘텐츠로 건너뛰기

라벨이 stock인 게시물 표시

통계관련 함수와 메서드 사전

A B C d E F G H I K L M N O P Q R S T U V W Z A statsmodels.ap.stats.anova_lm(x) statsmodels.formula.api.ols 에 의해 생성되는 모형 즉, 클래스 인스턴스(x)를 인수로 받아 anova를 실행합니다. np.argsort(x, axis=-1, kind=None) 객체 x를 정렬할 경우 각 값에 대응하는 인덱스를 반환합니다. Axis는 기준 축을 지정하기 위한 매개변수로서 정렬의 방향을 조정할 수 있음(-1은 기본값으로 마지막 축) pandas.Series.autocorr(lag=1) lag에 전달한 지연수에 따른 값들 사이의 자기상관을 계산 B scipy.stats.bernoulli(x, p) 베르누이분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 p: 단일 시행에서의 확률 scipy.stats.binom(x, n, p) 이항분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 n: 총 시행횟수 p: 단일 시행에서의 확률 C scipy.stats.chi2.pdf(x, df, loc=0, scale=1) 카이제곱분포의 확률밀도함수를 계산 $$f(x, k) =\frac{1}{2^{\frac{k}{2}−1}Γ(\frac{k}{2})}x^{k−1}\exp\left(−\frac{x^2}{2}\right)$$ x: 확률변수 df: 자유도 pd.concat(objs, axis=0, join=’outer’, …) 두 개이상의 객체를 결합한 새로운 객체를 반환. objs: Series, DataFrame 객체. Axis=0은 행단위 즉, 열 방향으로 결합, Axis=1은 열단위 즉, 행 방향으

로지스틱회귀(Logistic Regression)

내용 로지스틱회귀 비용함수 LogisticRegression() 결정경계 주가 자료에 적용 로지스틱회귀(Logistic Regression) 로지스틱회귀 로지스틱 회귀분석은 독립변수(특성, 설명변수)에 대해 반응변수(라벨)를 로짓변수 (logit variavble, 반응변수의 발생 확률의 자연로그)로 변환한 후 인스턴스(smaple)가 두 개의 클래스로 구분된 라벨(반응변수) 중에 특정한 클래스에 속하는 확률(최대우도)을 추정하기 위해 사용됩니다. 그러므로 이 회귀 모델은 binary classificatier를 구축하게 됩니다. 선형회귀와 유사하게 로지스틱회귀 역시 입력 변수들과 가중치들의 곱이 계산됩니다. 그러나 선형회귀의 경우 이 곱의 결과가 직접적으로 사용되는 것에 비해 로지스틱 회귀의 경우는 시그모이드 함수 (sigmoid function, σ(·))을 통해 [0, 1] 사이의 값으로 변환시킵니다. 즉, 식 1과 같은 연산에 의해 인스턴스의 결과(확률)가 계산됩니다. $$\begin{align}\tag{1} &\hat{p}=h_\beta(x)=\sigma\left(x^T\beta\right)\\ &t=x^T\beta\\ \tag{2}&\sigma(t)=\frac{1}{1+\exp(-t)}\end{align}$$ 시그모이드 함수(식 2)는 변수와 가중치의 곱의 결과를 0과 1사이의 값으로 변환합니다. import numpy as np import pandas as pd import matplotlib.pyplot as plt import FinanceDataReader as fdr from mpl_toolkits.mplot3d import Axes3D font1={'size':11, 'weight':'bold'} def sigmoid(x): return 1/(1+np.exp(-x)) t=np.linsp

정규화된 모델: Lasso, Elastic Net model

내용 Lasso model LassoCV() Elastic Net model 정규화된 모델: Lasso, Elastic Net model 정규화된 모델: Lasso model Lasso(Least Absolute Shrinkage and Selection Operator Regression)은 Ridge 모델 과 같이 선형회귀의 정규화된 모델입니다. 이 모델은 정규화를 위해 l 1 norm을 사용하며 lasso 모델의 비용함수는 식 1과 같습니다. $$\begin{equation}\tag{1}J(\beta)=MSE(\beta)+\lambda \sum^p_{i=1}\vert \beta_i \vert\end{equation}$$ 식 1에서 p는 변수의 수입니다. sklearn의 다음 클래스를 사용하여 lasso 모델을 생성할 수 있습니다. 이 클래스의 α는 λ와 같습니다. class sklearn.linear_model.Lasso(alpha=1.0, *, fit_intercept=True, ~~) 이 함수에 전달하는 반응변수(label)은 1차원 벡터 형태이어야 합니다. import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.linear_model import Ridge, Lasso, RidgeCV, LassoCV import FinanceDataReader as fdr 이 모델을 구축하기 위한 자료는 FinanceDataReader.DataReader() 함수를 사용하여 환율과 미국의 주요지수, 코스피 지수의 데이터를 호출하였습니다. st=pd.Timestamp(2010,3, 1) et=pd.Timestamp(2022, 6, 7) nme={'exchg':'USD/KRW','dj':"DJI",'n

한국과 외국의 시계열 자료의 합병

한국 금융자료와 외국 자료의 합병 시계열 자료는 날짜등의 시간에 따라 생산되는 자료입니다. 대표적으로 일일 주가자료는 거래일 기준으로 자료가 생산됩니다. 별도의 자료를 합치는 경우 시간이 이질적이라면 합쳐진 자료에 결측치가 포함됩니다. 이 경우 결측치를 조절하는 방법을 알아봅니다. 한국의 코스피와 환율, 외국의 지수 자료를 합쳐봅니다. import numpy as np import pandas as pd import FinanceDataReader as fdr 지수명 코스피 환율 다우 나스탁 필라델피아반도체 변동성(미국) 코드명 KS11 USD/KRW DJI IXIC SOXX VIX 코스피 지수의 모든 변수(Open, High, Low, Close, Volume, Change)와 다른 지수들의 종가(Close)를 호출하였습니다. 이 호출은 FinanceDataReader 패키지의 DataReader() 함수를 적용하였습니다. st=pd.Timestamp(2010,3, 1) et=pd.Timestamp(2022, 6, 4) nme={'exchg':'USD/KRW','dj':"DJI",'nasd':'IXIC','soxx':"SOXX", 'vix':'VIX'} kos=fdr.DataReader('KS11', st, et) stock={} for i, j in zip(nme.keys(), nme.values()): stock[i]=fdr.DataReader(j, st, et)['Close'] stock=pd.DataFrame(stock.values(), index=stock.keys()).T kos.tail(3) Close Open High Low Volume Change Date 2022-05-31 2

Sequential Data에 LSTM 적용

내용 시퀀스 데이터(Sequential Data) 전통적 신경망의 한계 RNN Long Short Term Memory (LSTMs) 적용 Sequential Data에 LSTM 적용 시퀀스 데이터(Sequential Data) 시퀀스 데이터는 데이터가 나열되어 있는 순서에 중요한 의미가 부여됩니다. 몇 가지 일반적인 유형의 순차 데이터를 예제와 함께 살펴보겠습니다. Language data 또는 a sentence 예를 들어 “My name is Ahmad”의 문장을 “Name is my Ahmad”와 같이 단어의 순서를 바꾼다면 성립하지 않습니다. 즉, 단어들의 순서가 문장의 의미를 전달하는 데 중요한 요소이기 때문에 순차 데이터입니다. Time Series Data 예를 들어, 회사 A의 연간 주식 시장 가격과 같은 종류의 데이터는 연도별로 확인하고 순서와 추세를 찾아야 합니다. 연도의 순서는 변경할 수 없습니다. Biological Data 예를 들어, DNA 서열은 순서대로 유지되어야 합니다. 관찰하면 시퀀스 데이터는 우리 주변 어디에나 있습니다. 예를 들어 오디오를 음파, 텍스트 데이터 등의 시퀀스로 볼 수 있습니다. 이것들은 순서를 유지해야 하는 시퀀스 데이터의 몇 가지 일반적인 예입니다. 전통적 신경망의 한계 다음의 단순한 신경망을 생각해 봅니다. plt.figure(dpi=100) font1={'family':'nanumgothic', 'size':12, 'weight':'bold'} plt.scatter([1, 2], [1, 1], s=200) plt.annotate("", (1,1), (2,1),arrowprops=dict(color="blue", arrowstyle="-")) plt.text(1, 0.99, 'Input Lay

Multiple Perception Lyers: Regression

Multiple Perception Lyers: Regression tensorflow.keras를 적용하여 kospi 주가의 회귀모형을 구축합니다. > colab 에서 실행한 코드로 주식자료를 호출하기 위해 다음 패키지 설치가 필요합니다. !pip install -U finance-datareader import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler from sklearn import metrics from sklearn.model_selection import train_test_split from sklearn.model_selection import KFold import tensorflow as tf from tensorflow.keras import models, layers import FinanceDataReader as fdr 주가 데이터의 이동평균을 계산하고 원시데이터에 연결하기 위한 함수를 작성합니다. #이동평균을 원시데이터에 연결 def addMa(data, window=[3,5]): for i in window: y=data.rolling(i).mean() y.columns=[f"{j}_{i}" for j in y.columns] data=pd.concat([data, y], axis=1).dropna() return(data) def maDataMake(da, window=[3, 5]): x=addMa(da, window) x1=x.replace(0, method='ffill') x1=x1.replace(np.inf, method='ffill') x1=x1.dropna() return(x1) 주가 자료를 호출합니다. st=pd.Ti

데이터 분석을 위한 금융자료 I

내용 결측치 조정 표준화 tensor 형으로 전환 batch sample 생성 주가가료 FinanceDataReader 모듈을 사용하여 다양한 금융자료를 호출할 수 있습니다. 이 호출된 자료는 pandas.DataFrame 형으로 분석 툴에 적합한 자료형으로 변환이 필요합니다. 다음은 kospi에 대한 자료를 호출한 것입니다. import FinanceDataReader as fdr st=pd.Timestamp(2000,1, 1) et=pd.Timestamp(2021, 12, 27) data=fdr.DataReader("KS11", st, et) data.tail(3) Close Open High Low Volume Change Date 2021-12-23 2998.17 2998.02 3000.70 2980.91 483840000.0 0.0046 2021-12-24 3012.43 3009.48 3025.77 3009.48 537550000.0 0.0048 2021-12-27 2999.55 3013.94 3017.31 2999.30 462900.0 -0.0043 위 결과와 같이 호출된 주가자료를 Close, Open, High, Low, Volume, Change(종가, 시가, 고가, 저가, 거래량, 변화율)등으로 구성되어 있습니다. 위와 같은 지수와 개별종목의 경우 가격의 순서에서 차이가 납니다. 예를 들어 삼성전자의 경우 변수의 나열순서가 시가, 고가, 저가, 종가, 거래량, 변화율 순으로 나타냅니다. 이러한 차이는 이후 자료의 조정에서 유의되어야 할 부분입니다. 위 자료중 change는 전날 거래 종료 이후에 일어나는 거래의 변화를 나타냅니다. 위 자료를 기반으로 하는 분석자료는 다음과정을 통해 이루어집니다. 물론 이 과정은 유연한 것이며 다른 방법으로 대체할 수 있습니다. 다음 과정은 4번 이후

[python]kopsi, krw, aud, chf 비교

kopsi, krw, aud, chf 비교 다음 코드는 colab notebook을 사용하였습니다. 웹을 통해 금융데이터를 호출하기 위해서는 FinaceDataReader 모듈을 장착해야 합니다. colab에 이 모듈을 인스톨 하기 위해 다음 코드를 사용합니다. !pip -q install finance-datareader kopi 데이터를 호출합니다. import numpy as np import pandas as pd import FinanceDataReader as fdr %matplotlib inline import matplotlib.pyplot as plt #KS11 kospi=fdr.DataReader('KS11', '2020') kospi Date Close Open High Low Volume Change 2020-01-02 2175.17 2201.21 2202.32 2171.84 4.946800e+08 -0.0102 ... ... ... ... ... ... ... 2020-06-10 2189.28 2187.91 2191.87 2178.12 1.591500e+05 0.0002 각 환률 데이터를 호출합니다. won=fdr.DataReader('USD/KRW', '2020') aus=fdr.DataReader('USD/AUD', '2020') chf=fdr.DataReader('USD/CHF', '2020') 각 데이터의 종가를 비교하기 위해 다음과 같이 합병합니다. data=pd.concat([kospi['Close'],won['Close'], aus['Close'], chf['Close']]

주가자료의 변형

주가 자료는 날짜,시가, 고가, 저가 종가, 거래량으로 정리됩니다. 이러한 기본자료로 부터 원하는 부분을 추출하기 위해 자료의 형태를 수정하여야 할 경우가 있는데 그러한 수정에 필요한 함수들을 작성해 보면 다음과 같습니다. 우선 날짜를 기준으로 구분하기 위해서는 날짜의 형식을 연산이 가능한 형태로 변경해 주어야 합니다. python에서 엑셀등으로 부터 자료를 호출할 경우 날짜로 된 인덱스는 문자형인 경우가 많으므로 이를 pd.Timestamp로 변경하여 연산이 가능하도록 합니다. 다음은 엑셀로 부터 호출한 kospi 자료의 날짜 인덱스의 변경 예입니다. >>> kos_day=[pd.Timestamp(i) for i in kos.index] >>> kos.index = kos_day 이러한 변화에 의해 다음과 같이 날짜에 대한 연산이 가능해 집니다. >>> kos.iloc[kos.index<pd.Timestamp(2011,1,1),:] Out[ 22 ]: Open High Low Close Volume 2010-01-04 1681.71 1696.14 1681.71 1696.14 295646000 2010-01-05 1701.62 1702.39 1686.45 1690.62 407629000 2010-01-06 1697.88 1706.89 1696.10 1705.32 425407000 2010-01-07 1702.92 1707.90 1683.45 1683.45 461562000 2010-01-08 1694.06 1695.26 1668.84 1695.26 379138000 2010-01-11 1700.79 1705.73 1694.12 1694.12 405115000 2010-01-12 1695.83 1701.16 1683.29 1698.64 382863000 2010-01-13 1683.

주가추정 결과

Kospi를 비롯한 몇가지 종목의 다음날의 추정치는 시가, 고가, 저가, 종가, 거래량 데이터를 기반으로 계산된 지표를 첨가하여 lasso 회귀모형을 기반으로 분석한 결과입니다.  이 추정결과는 다음 링크에서 확인할 수 있습니다. 각 달이 하나의 파일에 포함되면 각 spearsheet의 이름은 추정된 날짜를 나타냅니다. 또한 동일한 날짜에 "c"표시는 원 데이터를 실제 거래하는 가격의 간격에 따라 구분하여 분석한 결과입니다.  'wk'는 주간 추정치 입니다.  추정결과 

수치형 자료의 목록화_python

시가, 고가, 저가, 종가, 거래량으로 구성되어 있는 일일자료 중 종가를 기준으로 다음을 계산 1) (당일 - 전일)/전일 2) 일정한 구간으로 구분 3) 원자료와 결합 위 과정중 1)을 위해 사용자 정의 함수를 작성하여 사용 def InterRetS(da, inter=1):     ref=da.shift(inter)     re=(da-ref)/ref     re.columns=da.columns+"interRet"     return(re) 테스트를 위한 자료는 kodex leverge 일일자료를 사용 위 함수는 지정된 시차의 자료와 각 열 (각 변수)별로 위의 1)을 계산합니다. kl1.head(2) Out[13]:             Open  High   Low  Close    Volume 2016-01-04  9810  9815  9470   9490  31928370 2016-01-05  9420  9620  9400   9525  27896887 ret=InterRetS(kl1) ret.head(2) Out[14]:             OpeninterRet  HighinterRet  LowinterRet  CloseinterRet  \ 2016-01-04           NaN           NaN          NaN            NaN  2016-01-05     -0.039755     -0.019868    -0.007392       0.003688              VolumeinterRet  2016-01-04             NaN  2016-01-05       -0.126266  위에서 계산한 각 열의 값들의 목록화를 위해 구간을 지정합니다. 즉, nplinespace(sart, end, num=50) 함수를 사용하여 구간을 지정합니다. mn=ret.min() mn Out[18]: OpeninterRet   

linear regression_python

선형회귀는 회귀계수 w=(w1, w2, ..., wp)를 가진 선형모형을 생성하는 것입니다. 이는 반응변수의 관찰치와 선형 모형에 의한 추정치 사이의 잔차제곱합이 최소가 되도록 설정합니다. $$ \text{min} \sum^n_{i=1} {(x_i w- y_i)^2}$$ 회구모형을 구축하기 위해 sklearn 모듈을 사용하는데 제공되는 모든 함수는 list 또는 np.array 형을 대상으로 합니다. 그러므로 아래와 같이 pandas 모듈의 함수를 사용하여 엑셀로 부터 데이터를 호출하는 경우 호출되 데이터는 DataFrame 형태이므로 이들의 형식을 np.array 형으로 변경하여야 합니다. >>> import numpy as np >>> import pandas as pd >>> from datetime import datetime, timedelta >>> import matplotlib.pyplot as plt >>> from sklearn import linear_model >>> kl=pd.read_excel('C:\\~~.xlsx', sheet_name="kl") >>> startd=pd.Timestamp(datetime(2017,12, 1)) >>> kl1=kl.ix[kl.index>=startd, :] >>>  kl1              Open   High    Low  Close    Volume 2017-12-01  17550  17580  17345  17425   9696255 2017-12-04  17550  17750  17400  17750   8287180 2017-12-05  17610  17955  17530  17875   9387273 .... 위 데이터에서 Open, High, Low를 독립변수

회귀분석을 위한 주가데이터 만들기2_ DataForRegressionS

포스트 DayInInterRetStockS() 의 클래스를 소개하는 글에서 원 일일주가데이터로 부터 새로운 변수들을 생성하여 새로운 객체를 만들었습니다. 그 결과를 바탕으로 회귀분석을 위한 데이터 생성을 계속해 보면 다음과 같습니다.  이전의 데이터 경향으로 새로운 값을 예측하는 것이 회귀분석의 기본방향이라면 위에서 생성된 데이터들 중에 예측에 사용되는 변수들(독립변수)과 예측을 위한 변수(반응변수)를 구분해야 겠지요. 이전에 생성한 객체의 변수명은 다음과 같습니다.  >>> da.columns Index(['Open', 'High', 'Low', 'Close', 'Volume', 'Close:Open:ret',        'Close:High:ret', 'Close:Low:ret', 'Open:intRet', 'High:intRet',        'Low:intRet', 'Close:intRet', 'Volume:intRet', 'olag', 'hlag', 'llag',        'clag', 'vlag'],       dtype='object') 위의 변수들 중에 반응변수의 대상은 'Open', 'High', 'Low', 'Close'중의 하나의 변수가 될 것입니다.  예로서 Close를 반응변수로 한다면 나머지 변수들은 독립변수가 됩니다. 독립과 반응변수는 날들로 모형의 설계는  '당일까지의 독립변수들의 성격들로 다음날의 반응변수를 예측' 으로 구축할 것입니다.  이러한 구축을 위해 먼저 독립변수들과 반응변수를 구분하고 이 두 대상의 날짜를