이번 포스티에서는 시계열뿐만 아니라, 전반적인 데이터 분석에서 최근 많이 사용되는 앙상블 기법들이 어떤 의미를 갖는 지에 대해서 설명할 것이다. 앙상블(Ensemble) 앙상블이란, 하나의 데이터 모델을 학습하여 예측하지 않고, 여러 데이터 모델들을 생성하여, 각각 학습을 진행하고, 예측을 하여, 예측 결과들을 통해서 최종 예측 결과를 도출하는 기법을 의미한다. 단순하게 생각하면, 여러 데이터 모델들을 이용하여 예측을 하는 기법이라고 생각하면 된다. 앙상블 기법과, Bagging, Boosting의 기술적인 내용은 https://dsbook.tistory.com/165?category=761052 와 그 후속 포스팅에 자세하게 나와있으니 이것을 참고하자. Bias-Variance Trade-Off 데이터..
시계열 분석 검색 결과
정규화 방법론 선형회귀 분석을 통해서 계산된 계수(Weight)에 대한 제약 조건을 추가함으로써 과적합(Overfiiting)을 방지하는 방법 일반적으로 과적합은 계수의 크기를 엄청나게 증가시키는 경우에 많이 발생하므로, 정규화 방법론에서 사용하는 제약 조건은 계수의 크기를 제한하는 방법이 많이 사용된다. 참고> argmin 앞으로 선형 회귀 등 여러 기계학습 알고리즘을 접하다 보면, argmin이라는 기호를 접할 때가 있다. argmin은 뒤의 식을 최소로 만드는 해당 변수의 값을 찾아낼 때 사용하는 것으로 대괄호 안에 있는 식은 ( x - 1) ^ 2이므로, x = 1인 경우에 최솟값 0을 가진다. 이런 경우에 x_hat에는 대괄호 안에 있는 식을 최솟값으로 만드는 x의 값인 1을 x_hat에 할당한..
"시계열이 정상성이다." : 시간의 흐름에 따라 '통계적 특성'이 변하지 않는다. 비정상성을 지니는 데이터를 정상화 알고리즘을 적용해 예측 본 데이터의 특성을 적용하여 다시 본 데이터의 특성을 가지는 상태에서의 예측값을 도출 정상성 변환을 하는 이유 일반적인 경우에, 예측 범위의 상한, 하한이 정해져 있지 않다. 하지만, 정상성 변환 과정을 거치면 상한과 하한이 어느정도 예측 가능한 범위 내로 좁혀지게 된다. 이것 외에도 Variance나 Autocorrelation 등의 고려 요소도 사라지게 된다. 중요한 것은 정상성 그 자체보다는 정상성을 하는 이유가 더 중요하다. 정상성은 한가지 수단에 불과하고, 정상성 변환을 하는 이유로 다른 수단을 사용할 수 있어야 한다. 강정상, 약정상 강정상 : 모든 통계량..
이전 포스팅에서는 조건수가 데이터 분석에서 어떤 영향을 끼치는 지에 대해서 알아보았다. 조건수가 커지게 되면 X의 값이 조금만 변화하더라도, 예측 결과가 크게 변화하기 때문에, 조건수를 줄이는 방향으로 데이터 분석을 진행해야 한다는 것을 알아보았다. 조건수를 줄이는 방법 조건수를 줄이는 방법 중 크게 2가지에 대해서 알아볼 것이다. 1. Scaling 2. 다중 공선성 제거 1. Scaling 스케일링은 데이터의 각 Column마다 단위가 다르기 때문에, 단순히 각 Column들의 Variance를 보고 데이터를 정확하게 파악하기 힘들다. 이런 어려움을 없애기 위해서 범위를 일반적으로 0 ~ 100까지 의 비율로 통일시키는 과정을 Scaling이라고 부른다. Scaling의 방법에도 여러가지가 있다. 1..
조건수에 대해서 알아보기 전에 기본적인 데이터 분석의 목표를 알아보자. 데이터 분석의 공통적인 목표 : Train과 Test Data의 예측 성능을 높이는 것 하지만, 실질적으로 Train과 Test 데이터의 예측 성능을 동시에 올리는 것이 쉽지 않다. (Train을 과도하게 학습하면 Overfitting이 발생하기 때문이다. ) 하지만, 최종적으로 우리가 높여야 할 성능 1순위는 Test Data의 예측 성능이다. 그렇다면, Train의 성능을 조금 희생하더라도 Test의 성능이 더 잘 나올수 있도록 하는 방향으로 분석을 진행해야 한다. 이러한 방향으로 데이터 분석을 진행하는 데에, 조건수(Condition Number)라는 개념이 사용된다. 조건 수 (Condition Number) 조건수의 감소 목..
저번 실습을 진행한 결과, 간단한 모델을 사용해서 예측을 진행했음에도, R-squared의 값이 1.0이 나왔다. 이것을 조금 더 현실적인 부분을 반영해서 데이터 전처리를 진행해보자. 왜 R-squared 값이 1이 나왔을까? Test Data의 정보를 Train Data에 반영했기 때문이다. 그렇다면 Test Data는 알려지지 않은 데이터를 어떻게 가정하고 풀어야 하는가? 1. Training Data의 특성이 그대로 반복된다고 가정한다. 2. 한단위씩 예측을 수행하고, Training Data를 갱신해나가면서 학습 및 예측을 수행한다. 특히, 2번에 관해서는 1스텝 교차 검사, 2스텝 교차검사 등이 있다. 기존에 시계열 분석에서 Train Data와 Test Data를 분리하는 경우에는 특정 시점을..
이번에는 Y의 실제값과, 알고리즘을 통해서 예측한 Y값을 비교함으로써, MAE, MSE, MAPE 등을 계산하고, 시각화하는 실습을 진행한다. Y의 예측값을 산출하기 위해서는 일단 간단한 데이터 분석 알고리즘이 있어야 한다. 선형회귀 분석의 기초인 OLS를 그 예시로 활용할 계획이다. 일단 OLS에 대해서 간단하게 알아보자. OLS (Ordianry Least Square) 우리말로는 최소자승법 혹은 최소제곱법이라고 불리기도 한다. OLS는 잔차제곱합인 RSS (Residual Sum of Squares)를 최소화하는 가중치 벡터를 구하는 방법이다. 입력된 데이터를 X라고 하고, 가중치 벡터를 w라고 할 때, 잔차 : (실제 y값) - ( 예측한 y값) 여기에서 잊지말아야 할 점은, e가 상수가 아니라 ..
이전까지의 실습 내용을 통해서 데이터를 전처리하였고, 이번 실습에서는 전처리된 데이터가 어떤 그래프 형태를 지니는지, 어떤 특성을 가지고 있는지를 시각화하는 실습을 진행할 것이다. 그 후 각 Column 들 간의 상관도를 계산할 것이다. 시각화 raw_fe.describe(include = 'all').T 보통 df.describe() 혹은 df.describe().T를 통해서 데이터의 기본적인 통계적 특성을 확인한다. 여기에서 include = 'all'이라는 옵션을 설정해주게 되면, 수치로 된 데이터가 아닌, object 형태의 데이터나, category 형태의 데이터 또한, 생략하지 않고 보여준다. 히스토그램 raw_fe.hist(bins = 20, grid = True, figsize = (16,..
훈련/테스트 데이터 분리 raw_train = raw_fe.loc[raw_fe.index = '2012-07-01', :] print(raw_train.shape, raw_test.shape) 일반적인 데이터에서 훈련 데이터와 테스트 데이터를 분리하는 경우와는 달리 시간의 순서에 따라서, 훈련 데이터와 테스트 데이터를 나누어야 한다. Y_colname = ['count'] X_remove = ['datetime','DateTime','temp_group','casual','registered', 'Quarter '] X_colname = [x for x in raw_fe.columns if x not in ..
.rolling( ) (count_day, count_week) 해당 실습에서는 빈도(frequency)를 시간('H')으로 설정했다. 하지만, 이 데이터에서 시간으로 빈도를 설정하는 것이 가장 옳은 방식이라고 단정할 수는 없다. 시간 외에도 일(Day), 주(Week)의 단위에 대해서도 데이터를 분석해봐야 하고, 이때 사용할 수 있는 함수가 .rolling( )이다. pd.concat([raw_all[['count']], raw_all[['count']].rolling(24).mean(), raw_all[['count']].rolling(24*7).mean()], axis = 1).plot(kind = 'line', figsize = (20, 6), linewidth = 3, fontsize = 20,..
최근댓글