데이터분석 139

정상성 테스트 및 비정상성 제거 실습

0. 정상성의 의미 정상성의 의미와 예시에 대해서 아래의 글에 정리했다. sosoeasy.tistory.com/387 시계열에서 정상성의 의미 1. 의미 정상성(Stationarity Process)이란? => 평균, 분산, 공분산 및 기타 모든 분포적 특성이 일정함을 의미. 시계열이 정상적이다? => 시간의 흐름에 따라 "통계적 특성(평균, 분산, 공분산)"이 변하지 sosoeasy.tistory.com 1. 정상화 및 정상성 테스트 이번 장에서는 비정상성 데이터를 정상화 하고, 정상성을 테스트 하는 방법에 대해서 실습해 본다. 정상화 하는 방법은 4가지 정도가 있다. (1) 추세차분 (2) 계절성차분 (3) 로그화 (4) box-cox변환 각각을 실습을 통해 수행해 본다 2. (1)추세차분, (2)계..

앙상블기법 배깅(bagging)과 부스팅(boosting)

0. 앙상블 머신러닝에서 여러개의 모델을 학습시켜 모델의 예측결과를 이용해 하나의 모델보다 더 나은 값을 예측하는것 1. 배깅(bagging) 높은 variance를 낮추는 것 (과적합 된 모델을 샘플링을 통해 과적합을 완화시키는것) bootstrapping을 통해 여러 학습 데이터를 만들고 이들의 평균값을 구하는것. bias가 낮은 모델들을 이용하여 variance를 줄인다. (중심극한정리의 원리와 비슷하다) - 의사결정나무 from sklearn.tree import DecisionTreeRegressor # DecisionTree fit_reg5 = DecisionTreeRegressor().fit(X_train_feRSM, Y_train_feR) pred_tr_reg5_feRSM = fit_reg..

정규화 선형회귀 릿지(ridge), 라쏘(lasso), elastic net

0. 정규화 선형회귀? (1) 선형회귀 계수(Weight)에 대한 제약 조건을 추가함으로써 모형이 과도하게 최적화되는 현상인 과최적화를 막는 방법 (2) 계수의 크기가 커지면 과적합됨. => 계수의 크기를 제한함 * 기존의 회귀분석? 1. 릿지회귀(ridge Regression) (1) 정의 추정계수의 제곱합을 최소로 하는것. (2) 특징 - 제곱합을 최소화 하기 때문에 계수의 크가 줄어듬 => 과적합이 방지됨 - 다중공선성이 분산되기 때문에 효과적 - 딥러닝 loss function에서 L2 panelty로 사용됨 (3) 코드 # Ridge fit = Ridge(alpha=0.5, fit_intercept=True, normalize=True, random_state=123).fit(X_train, Y..

시계열 회귀분석 과정

아래와 같은 process를 가지는 시계열 회귀분석 및 머신러닝 과정을 정리한다. 1. 변수추출가용변수들을 이용해서 시간변수를 년, 월, 일, 요일, 시, 분, 초 등으로 분해하거나, 추세,계절성,잔차로 분해하여 파생변수를 만드는 행위sosoeasy.tistory.com/382각종 feature engineering후 시계열 회귀분석 하기각종 feature engineering을 수행한 후 회귀분석을 통해 시계열데이터를 분석해 본다 non_feature engineering과의 차이도 알아본다. 1. 필요한 라이브러리 다운 # Ignore the warnings # 버전이 바뀌었을때 발생..sosoeasy.tistory.com 2. 데이터 분할시계열 데이터를 train set, test set으로 나누기..

시계열에서 정상성의 의미

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)..

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..