전체 702

시계열에서 정상성의 의미

1. 의미 정상성(Stationarity Process)이란? => 평균, 분산, 공분산 및 기타 모든 분포적 특성이 일정함을 의미. 시계열이 정상적이다? => 시간의 흐름에 따라 "통계적 특성(평균, 분산, 공분산)"이 변하지 않는것 2. 약정상(Weak stationarity)과 강정상(Strong Stationarity) (1) 약정상 : 두 시점을 비교했을 때 정상적인 것. (비수학적 이해) if {𝑋𝑖𝑡}𝑡=+∞𝑡=−∞{Xit}t=−∞t=+∞ is a weak stationary process, 1) 𝑋𝑖1Xi1, 𝑋𝑖2Xi2, 𝑋𝑖3Xi3, ... have the same distribution. 2) (𝑋𝑖1,𝑋𝑖3)(Xi1,Xi3), (𝑋𝑖5,𝑋𝑖7)(Xi5,Xi7), (𝑋𝑖9,𝑋𝑖11)(..

VIF를 이용한 변수선택 (다중공선성 제거)

독립변수간에 상관성이 있으면 과적합되거나 정확한 분석이 되지 않을 수 있다. 따라서 변수들간에 상관성을 확인하고 상관이 있는 변수들은 제거한다. 변수를 제거하는 방법은 VIF, PCA 2가지가 있다. 상황에 따라 적절하게 사용하면 된다. 참고로 PCA는 존재하는 변수 중 일부를 선택하거나 제거하는 것이 아니라 새로운 차원을 만들기 때문에 수행 후 설명성이 부족하다. 이 장에서는 VIF(Variance Inflation Factor)에 대해서 알아 본다. 0. VIF 독립변수를 다른 독립변수들로 선형회귀한 성능을 나타내며 가장 상호의존적인 독립변수를 제거한다. 의존성이 낮은(분산이 작은) 독립변수를 선택하거나, 의존성이 높은(분산이 높은) 독립변수를 제거하며 사용한다 1. 식 2. 코드 X_train_fe..

스케일링(scaling) 및 인버스스케일링 종류와 코드 (정규화, 역정규화)

스케일링은 컬럼별 단위차이를 줄여서 연산속도를 빠르게 하고 조건수를 줄여서 최적화 성능을 향상시킨다. standard scaler 평균을 빼고 표준편차로 나누는 변환. 각 변수가 정규분포를 따른다는 가정 후 수행하므로 정규분포가 아닐 시 최선이 아닐 수 있다. (1) 식 (2) 그래프 min-max scaling 가장 많이 사용되는 알고리즘, 값을 0~1로 바꿔줌. 각 변수가 정규분포가 아니거나 표준편차가 매우 작을 때 효과적이다. (1) 식 (2) 그래프 robust scaling 최소-최대 스케일과 유사하다. 최소최대 대신 IQR(InterQuartile Range)중 1분위수, 3분위수를 사용한다. 이상치의 영향을 최소화 하였기 떄문에 이상치가 있는 데이터에 효과적이다. (1) 식 (2) 그래프 n..

회귀분석에서 조건수(Condition Number)

1. 식 2. 의미 변수들간에 상관성을 나타낸다. 조건수가 낮다 => 변수들이 서로 독립이다 => 오버피팅 할 확률이 낮다. => 오차에 강건하다 조건수가 높다 => 변수들이 서로 상관성이 많다 => 오버피팅 할 확률이 높다. => 오차에 민감하다 3. 예시 yi=c1x1i+c2x2i x1 = {1, 2, 3, 4} x2 = {10, 20, 30, 40} 위와 같은 상황에서 x1과 x2는 상당히 높은 연관성이 있다. 따라서 조건수를 계산하면 높은값이 나온다. 또한 y값을 결정하는데 x1과 x2의 비슷한 추세가 크게 작용하여 이러한 형태에 대해서만 오버피팅하게 된다. 4. 오차의 영향 (1) 변수가 완전히 독립일때 - 오차에 강건함 # 조건수가 작을 때 # X 데이터 import numpy as np A ..

각종 feature engineering후 시계열 회귀분석 하기

각종 feature engineering을 수행한 후 회귀분석을 통해 시계열데이터를 분석해 본다 non_feature engineering과의 차이도 알아본다. 1. 필요한 라이브러리 다운 # Ignore the warnings # 버전이 바뀌었을때 발생할 수 있는 오류들을 경고해주는 메시지 import warnings #warnings.filterwarnings('always') warnings.filterwarnings('ignore') # System related and data input controls import os # Data manipulation and visualization import pandas as pd pd.options.display.float_format = '{:,.2..

편향(bias)과 분산(variance)

1. 정의 (1) 편향(bias) : 예측값과 실제값의 거리 - 편향이 작을 때 : 데이터를 최대치로 학습함을 의미(과대적합) - 편향이 클 때 : 데이터를 최소치로 학습함을 의미(최소적합) (2) 분산 : 학습한 모델의 예측값이 평균으로 부터 퍼진 정도 2. 편향과 분산과의 관계 (1) 모델의 복잡도가 낮으면? bias는 증가하고 variance가 감소 (ols회귀분석) (2) 모델의 복잡도가 높으면? bias는 감소하고 variance가 증가 (딥러닝) => bias와 variance가 최소화 되는 수준에서 모델의 복잡도 선택 *출처 : 패스트캠퍼스 "파이썬을 활용한 시계열 데이터분석 A-Z"

cross table 그리기

두 값의 관계를 볼 수 있는 cross table을 그려본다. pd.crosstab(index={dataframe}['{속성1}'], columns={dataframe}['{속성2}'], margins=True) raw_fe.columns - 도수로 표현 # generate cross table sub_table = pd.crosstab(index=raw_fe['count'], columns=raw_fe['weather'], margins=True) sub_table - 퍼센트로 표현 # generate cross table sub_table = pd.crosstab(index=raw_fe['count'], columns=raw_fe['weather'], margins=True) sub_table/sub..

scatter(산점도) 그리기

1. x값과 y값의 관계를 파악할 수 있는 산점도 그리기를 코드를 통해 구현한다. dataframe.plot.scatter(y='{att1}', x='{att2}', grid=True, figsize=(12,5)) # att1:x값, att2:y값, grid:그래프 격자선, figsize:그래프크기 raw_fe.columns - 속성2개 raw_fe.plot.scatter(y='count', x='Hour', grid=True, figsize=(12,5)) plt.show() - 속성3개(이산형) #c와 colormap파라미터를 이용하여 속성을 하나더 표시할 수 있다. raw_fe.plot.scatter(y='count', x='Hour', c='temp', grid=True, figsize=(12,5)..

boxplot(상자그림) 시각화하기

boxplot(상자그림)을 시각화한다. 1. boxplot 설명 상자그림은 아래와 같다. 가운데 박스는 맨아래 가로선부터 1분위, 2분위, 3분위를 나타낸다. 아래 선(minimum observation)은 (1분위-1.5*QR)~(1분위) 값 중 가장 작은값, 위쪽 선(maximum observation)은 (3분위)~(3분위+1.5*QR) 값 중 가장 큰 값을 나타낸다. 그 외의 값은 outlier라고 하여 점으로 표시한다. 2. 코드 dataframe.boxplot(column='{분석할 att}', grid=True, figsize=(12,5)) #grid:격자표시 raw_fe.columns - 1개 raw_fe.boxplot(column='count', grid=True, figsize=(12,..

카테고리 없음 2020.12.18

statsmodels.api를 이용한 시계열 회귀분석

sklearn의 statsmodels.api 함수를 이용하여 OLS방식으로 회귀분석을 수행한다. - data import statsmodels.api as sm - 데이터 분할 함수 구현 # 시계열데이터 분할 함수 def datasplit_ts(raw, Y_colname, X_colname, criteria): raw_train = raw.loc[raw.index = criteria,:] Y_train = raw_train[Y_colname] X_train = raw_train[X_colname] Y_test = raw_test[Y_colname] X_test = raw_test[X_colname] print('Train_si..

시계열데이터와 비시계열데이터의 데이터셋 분할하는 법

1. 비시계열데이터 (1) 설명 데이터셋을 보통 (훈련셋:검증셋:테스트셋=6:2:2)로 나눈다. 이때 데이터는 보통 랜덤으로 추출한다. (2) 코드 from sklearn.model_selection import train_test_split # test_set의 사이즈를 0.2%로 설정 X_train, X_test, Y_train, Y_test = train_test_split(dataframe[X_colname], dataframe[Y_colname], test_size=0.2, random_state=123) 2. 시계열데이터 (1) 설명 시계열데이터의 경우 랜덤성을 부여하면 안되고 시간축을 유지한다. 과거부터 데이터부터 train,validation,test 순으로 비율을 나눈다 * 주의할점 te..

pandas dataframe 시계열 관련 함수

1. 시계열데이터로 바꾸는 함수 dataFrame.asfreq('단위',meathod='결측치채우는방법') # 단위 #'D':day, 'W':week, 'H':Hour # meathod # 'ffill' or 'pad' : forward fill, 앞에것으로 뒤에것을 채우는것 # 'bfill' or 'backfill' : 뒤에것으로 앞에것을 채우는것 2. 시계열데이터에서 결측치 확인하기 raw_all #결측치가 있는 값은 True를 반환한다 raw_all.asfreq('H').isnull().sum(axis=1)>0 #결측치가 있는 행을 반환한다 raw_all.asfreq('H')[raw_all.asfreq('H').isnull().sum(axis=1) > 0] 3. 시계열 분해(추세, 계절성, 잔차) ..

회귀분석 결과 해석시 SSR,SSE,SST의 의미와 용어 주의할점

회귀분석을 수행한 후 결과값을 해석할때 SSR,SSE,SST값을 이용한다. 이때 각 요소들의 의미와 용어의 헷갈리는 부분을 정리한다. 알아보기 쉽게 설명가능수치는 파란색 설명불가능한 수치는 빨간색으로 표시한다. 1. 설명가능한 수치 y값의 평균과 y값을 통해 구한 회귀선 간의 차이를 의미한다. y값들을 분석하여 이들을 설명하는 회귀식을 구했다. 이는 분석을 통해 설명이 가능해진 수치이다. 정리하면 아래와 같다. 2. 설명불가능한 수치 y실제값과 예측값 사이의 차이를 의미한다. y값을 회귀식으로 예측했다. 하지만 예측한 값과 실제값이 차이가 있을 수 있다. 이것은 회귀식으로는 설명할 수 없는 설명불가능한 수치이다. 정리하면 아래와 같다. 3. 총 변동 y값들의 평균값과 실제 y값의 차이로 총 변동을 의미한..

aws s3 스토리지에서 파일 다운로드, 열기

1. 파일 다운로드 s3.download_file('버켓이름','버켓하위 경로를 포함한 s3속 파일이름',"로컬에 저장할때 파일이름") * 예시 import boto3 s3=boto3.client('s3') s3.download_file('presentation-storage','UserPowerpoint/test6.txt',"down_file.txt") 2. 저장안하고 바로 열기 s3.Object("버켓이름","버켓 하위경로 포함한 파일이름") * 예시 s3=boto3.resource('s3') obj=s3.Object('presentation-storage','UserPowerpoint/test6.txt') myBody=obj.get()['Body'].read() print(type(myBody)) ..

데이터 직접 생성하고 linear regression직접 구현하기

1. 설명 y=⍬x 단일 회귀분석을 수행한다 각 곱,합,평균 등의 계산을 클래스로 구현하고, forward와 back propagation함수를 각 클래스 내부에 구현한다. 2. 파일 (1) basic node.py import numpy as np class mean_node: def __init__(self): self._x=None self._z=None def forward(self, x): self._x = x self._z = np.mean(self._x) return self._z def backward(self, dz): dx = dz * 1 / len(self._x) * np.ones_like(self._x) return dx class square_node: def __init__(se..