728x90 Data Science/Data Preprocessing 썸네일형 리스트형 [04. Feature Sampling] 003. Train / Validation / Test Split 모델의 성능을 평가하기 위해 크게 3가지 데이터셋을 준비해야 한다. 1. Train set : 모델을 학습하는 데에 사용되는 유일한 데이터 2. Validation set : 학습이 완료된 모델을 검증하는 데이터이며 과적합(overfitting)을 방지하기 위해 사용된다. 3. Test set : 모델의 최종 성능을 평가하는 데에 사용된다. Validation set을 사용하지 않는 경우도 있으며, 이런 경우에는 보편적으로 Train set과 Test set의 비율을 8:2로 나눈다. 3가지 set을 모두 사용하는 경우에는 Train : Validation : Test = 6 : 2 : 2의 비율로 나누는 게 일반적이다. import pandas as pd from sklearn.model_selecti.. 더보기 [04. Feature Sampling] 002. Stratified Random Sampling 데이터의 특성상 몇 개의 층(Strata)으로 나누어진 데이터의 경우는 동일한 확률로 뽑는 것보다 층간의 비율에 맞춰 각 층 안에서 표본을 뽑는 것이 낫다. 모든 데이터에서 표본을 뽑는 경우 특정층이 뽑히지 않거나 소수로 뽑힐 확률도 있기 때문이다. 각 층 내에서 동질적이고 유사한 개체들로 묶여있는 데이터 집단에서는 층화추출이 단순확률추출보다 더 효율적이다. import pandas as pd import pandas as pd from sklearn.model_selection import StratifiedShuffleSplit if __name__ == '__main__': data = [{'이름': '영수', '분야': '언어', '국어': 100, '영어': 90, '수학': 50, '과학': .. 더보기 [04. Feature Sampling] 001. Simple Random Sampling 모델의 성능을 테스트하기 위해서는 데이터를 확보해야 한다. 즉, 표본을 추출해야 한다. 빅데이터 시대에 모든 데이터를 다 사용할 수도 있지만 비용이 많이 들기 때문에 좋은 방법은 아니다. 표본의 추출 방법 중 하나인 동일한 확률로 뽑는 단순확률추출(Simple Random Sampling)에 알아보자. 여기에는 복원추출(Sampling with replacement)과 비복원추출(Sampling without replacement)이 있다. 복원추출은 중복을 허용하고 추출하는 방법이고 비복원추출은 중복을 허용하지 않는 방법이다. import pandas as pd if __name__ == '__main__': data = [{'이름': '영수', '분야': '언어', '국어': 100, '영어': 90.. 더보기 [03. Feature Engineering] 006. Dimensionality Reduction 차원축소는 모델링에 쓰이는 많은 변수들 중 설명력이 낮은 변수를 제거하거나 여러 변수를 결합하여 더욱 의미 있는 변수로 만들어 변수의 수를 줄이는 작업을 말한다. 크게 특성 선정(Feature Selection)과 특성 추출(Feature Extraction)로 나뉜다. 특성 선정에 대해 먼저 알아보자. 특성 선정은 말 그대로 여러 개의 Feature(변수) 중에 설명력 높은 Feature를 선정하는 것이다. 방법은 Forward Search와 Backward Search두 가지가 있다. 말그대로 Forward Search는 변수를 하나씩 모델에 넣어보는 것이다. 10개의 변수(10차원)가 있다면 1개씩 돌아가며 모델링에 사용해 가장 설명력이 높은 변수를 선택하고 그 다음엔 이미 선정한 변수를 제외한 9.. 더보기 [03. Feature Engineering] 005. Dummy 범주형 변수를 모델링을 하기 위해서는 더미변수를 만들어 모델링한다. 문자 그대로는 모델링 할 수 없기 때문이다. from bs4 import BeautifulSoup import pandas as pd import requests from io import BytesIO from zipfile import ZipFile import json def get_company_code(api_key): url = 'https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key=%s' % api_key response = requests.get(url) zip_file = ZipFile(BytesIO(response.content)) files = zip_file.namelist.. 더보기 [03. Feature Engineering] 004. Transform 다양한 데이터가 있다. 모델에 사용하는 데이터를 그대로 쓰면 의미가 이상해지는 경우가 있다. 예를 들어 주식시장에서의 PER은 시가총액 / 당기순이익 이며 PER이 낮을수록 저평가 기업으로 여겨진다. 하지만 당기순이익이 –인 적자상태라면? -10이 1보다 좋은 기업이라고 말할 수 없을 것이다. 이런 경우에는 간단히 역수를 취하면 된다. 1 / PER = 당기순이익 / 시가총액 이는 이익수익률이라고 불리며, 당기순이익이 높을수록 양의 값이 커지며 적자폭이 깊어질수록 음의 값이 커진다. 당기순이익이 높을수록 좋은 기업이며 적자가 심해질수록 좋지 않은 기업이다라고 해석할 수 있으며 이는 시가총액 대비 당기순이익이 높은 기업은 저평가라는 의미와 맞아 떨어진다. 따라서 있는 그대로의 데이터를 사용하는 것 보다 변.. 더보기 [03. Feature Engineering] 003. Binning 숫자형 변수를 범주형 변수로 변환하는 것을 구간화(Binning)라고 한다. 쉽게 설명하면 히스토그램을 생각하면 된다. 특정부분에서의 결측치가 많거나 의미있는 정보가 아닌 경우, 그리고 Raw Data로는 정보를 추출하기 힘든 경우 사용하면 된다. 그렇다고 모든 연속형 변수를 Binning시키면 중요한 정보가 사라질 수 있다. 모든 데이터 분석이 그렇듯이 분석자의 역량과 판단이 중요하다. from bs4 import BeautifulSoup import pandas as pd import requests from io import BytesIO from zipfile import ZipFile import json def get_company_code(api_key): url = 'https://open.. 더보기 [03. Feature Engineering] 002. Scaling 크기가 다른 여러 데이터를 분석할 때 스케일을 맞추지 않으면 동등비교가 되지 않고 모델에서 큰 값을 가진 데이터의 영향력이 커지게 되어 잘못한 분석결과를 도출할 수 있다. 또한 모델의 최적화 과정에서도 어려움을 겪게 된다. 1) 표준화(Standardization) 표준화는 데이터를 평균이 0이고 표준편차가 1인 분포로 변환해준다. (X – X의 평균) / X의 표준편차 2) 정규화(Normalization) 정규화는 범위가 0~1인 데이터로 변환해준다. (X – X의 Min) / (X의 Max – X의 Min) import FinanceDataReader as fdr if __name__ == '__main__': aapl = fdr.DataReader('AAPL', '2021-01-01') ssec .. 더보기 [03. Feature Engineering] 001. Aggregation 의미있는 정보 추출을 위해 데이터를 요약하는 방법과 다양한 통계치로 요약된 데이터를 한 번에 보는 방법에 대해 알아보자. 합, 최소값, 최대값, 중간값 등의 통계치를 한 번에 출력하는 방법은 다음과 같다. agg함수를 통하여 다양한 정보를 볼 수 있다. 아래는 전체기간 및 주간 단위로 그룹화하여 나타낸 결과이다. import FinanceDataReader as fdr if __name__ == '__main__': aapl = fdr.DataReader('AAPL', '2021-06-01') ssec = fdr.DataReader('005930', '2021-06-01') price = aapl[['Close']].merge(ssec[['Close']], how='outer', left_index=Tr.. 더보기 [02. Data Quality Assessment] 003. Duplicate values 중복된 데이터가 있는 경우는 어떻게 처리해야 할까? 그 데이터가 의미 있는 데이터이고 우연하게 중복된 값이 있는 것이라면 삭제해서는 안될 것이다. 하지만 주가 데이터 중에 휴일 데이터는 전 영업일 데이터를 가져오는 경우가 많기 때문에 삭제를 해야 할 것이다. 데이터의 의미를 잘 생각해보고 삭제 여부를 판단해야 한다. 아래는 휴일데이터가 없어 한국시장과 미국시장의 휴일이 다른 점을 이용하여 강제로 휴일 데이터를 만들어 삭제한 것이다. import FinanceDataReader as fdr import pandas as pd if __name__ == '__main__': aapl = fdr.DataReader('AAPL', '2020-11-21') ssec = fdr.DataReader('005930',.. 더보기 이전 1 2 다음