전체 글 98

[Time Series#4] 시계열 모형 (AR, MA, ARMA, ARIMA)

본 글에서는 여러가지 시계열 모형의 구성과 개념, 그리고 모델 선택 방법을 정리해보도록 하겠습니다. 정상 시계열 모형AR(p) (Auto-Regressive Model)자기회귀(AR) 모형은 현재의 관측값을 과거 시점의 값들로 설명하는 모델입니다.AR(1) (현재의 값이 1시점 이전의 값과 연관됨)AR(p) (일반화: 현재의 값이 p시점 이전의 값까지와 연관됨) AR 모델은 다음과 같은 특징을 가집니다.불확실 요소(impact 또는 innovation)는 정규분포를 따른다는 가정을 함계수는 독립적인 상수가 아니라 데이터의 평균과 관련됨모델의 정상성을 판단하려면 특성근(characteristic root)을 구해야 함.p=1일 때, 과거 1시점 이전의 값에 대한 계수의 절댓값이 1이하면 정상성 유지됨이때..

Time-Series 2025.04.25

[Time Series#3] Box-Cox 변환

시계열 데이터 분석을 진행하다 보면, 원시 데이터의 분포나 분산이 모델링에 적합하지 않은 경우가 많습니다.특히 예측 모델은 정상성(stationarity)을 기본 전제로 하는 경우가 많기 때문에, 데이터의 분산을 안정화하고 분포를 변환하는 과정이 필요합니다. 이때 유용하게 사용되는 대표적인 기법이 바로 박스-콕스(Box-Cox) 변환입니다. 왜 박스-콕스 변환을 사용하는가?박스-콕스 변환은 시계열 데이터를 모델에 투입하기 전에 사전 처리(preprocessing) 단계에서 적용하는 기법으로, 다음과 같은 효과를 기대할 수 있습니다.변동성 안정화: 데이터의 표준편차를 일정하게 유지하게 함비대칭 분포 개선: 오른쪽 꼬리가 긴 분포를 압축하여 정규성에 가까운 형태로 변환예측 성능 향상: 모델이 더 잘 작동..

Time-Series 2025.04.25

[Time Series#2] 정상성이란?

시계열 분석(Time Series Analysis)은 시간의 흐름에 따른 데이터를 다루는 통계 기법으로, 금융, 기후, 마케팅 등 다양한 분야에서 활용되고 있습니다. 이러한 분석을 수행하기 전, 반드시 이해해야 할 개념이 바로 정상성(Stationarity)입니다. 비정상 시계열 (Non-Stationary Time Series)비정상 시계열은 시간이 지남에 따라 확률적 특성이 변하는 시계열을 의미합니다.여기서 확률적 특성이란 평균, 분산, 자기상관계수와 같은 값들을 말합니다.이러한 데이터는 일반적으로 다음과 같은 특징을 가집니다. 평균이 일정하지 않음분산이 시간에 따라 변함시점 간 상관성이 일정하지 않음데이터에 뚜렷한 추세(trend)가 존재함 예) 랜덤 워크(Random Walk)이러한 비정상 시계..

Time-Series 2025.04.24

[Time Series#1] 시계열 분석이란?

시간 흐름에 따라 변하는 데이터를 다루는 시계열 분석은 주가, 날씨, 에너지 소비 등 다양한 분야에서 중요한 역할을 합니다. 이번 글에서는 시계열 분석과 예측의 핵심 개념들을 정리해보겠습니다. 시계열(Time Series)이란?시계열은 시간의 흐름에 따라 측정된 숫자형 데이터를 의미합니다.특정 시간 단위로 정렬된 이 데이터는 보통 과거의 값들과 일정한 패턴이나 관계를 갖고 있기 때문에, 이를 분석하면 미래의 값을 어느 정도 예측할 수 있습니다. 시계열 예시 하루 동안의 기온 변화한 달 동안의 가계 지출 내역매일 특정 키워드로 검색된 검색량시간대별 인터넷 트래픽주간 헬스장 이용자 수 변화 시계열 예측(Forecasting)이란?시계열 예측은 과거의 데이터를 바탕으로 미래 값을 추정하는 작업입니다.하지만 ..

Time-Series 2025.04.21

Pandas DataFrame vs Spark DataFrame

데이터 분석이나 전처리를 하다 보면 가장 많이 접하게 되는 객체 중 하나가 바로 DataFrame입니다.하지만 사용하는 환경에 따라 Pandas의 DataFrame과 Spark의 DataFrame은 구조도, 처리 방식도, 확장성도 전혀 다릅니다. 이 글에서는 두 프레임워크의 DataFrame이 어떻게 다르고, 어떤 상황에서 각각을 써야 하는지 비교해보겠습니다. Pandas DataFrame특징 CSV, Excel, SQL 등 다양한 파일을 쉽게 불러오기.groupby(), .pivot(), .merge() 등 강력한 분석 API 제공Python 코드와 완벽한 통합 (NumPy, Matplotlib 등과 잘 맞음)장점 NumPy 기반으로 구현되어 매우 빠름→ Pandas의 대부분 연산은 NumPy의 배..

Spark 2025.04.18

Spark란?

대규모 데이터를 빠르고 효율적으로 처리하려는 노력은 계속되어 왔습니다. 기의 고비용 병렬 처리 시스템부터 오픈소스 분산 처리 프레임워크까지, Spark가 주목받게 된 과정을 단계별로 살펴보겠습니다. 1. MPP (Massively Parallel Processing)MPP는 ‘대규모 병렬 처리’를 의미합니다. 수많은 독립적인 하드웨어(노드)가 각자의 데이터베이스를 운영하며 병렬적으로 데이터를 처리하는 구조입니다. 여러 대의 서버에서 병렬로 작업 처리데이터를 분산 저장하여 병목을 줄임고성능 시스템이지만 비용이 매우 높음 MPP는 Oracle Exadata, Teradata, IBM Netezza 같은 대형 벤더의 솔루션으로 잘 알려져 있습니다. 병렬성과 처리 성능이 뛰어났지만, 장비 도입과 라이선스 비용..

Spark 2025.04.18

[DB Optimization#15] HAVING 문 튜닝

SQL에서 집계 함수를 사용할 때 자주 쓰이는 함수가 있습니다. 바로 HAVIN문입니다. 하지만 무분별한 사용은 성능 저하를 초래할 수 있기 때문에, HAVING을 꼭 써야 하는 경우가 아니라면 WHERE문으로 대체하는 것이 더 바람직한 경우가 많습니다. 이번 글에서는 100만 건의 데이터를 기반으로 HAVING을 사용했을 때와 WHERE으로 대체했을 때의 성능 차이를 비교해 보며, 어떤 방식이 더 효율적인지 실습을 통해 확인해 보겠습니다. 실습CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), age INT, department VARCHAR(100), salary INT, created..

SQL 2025.04.17

[DB Optimization#14] WHERE vs ORDER BY, 어디에 인덱스를 거는 것이 좋을까?

SQL 최적화에서 자주 나오는 고민 중 하나는 WHERE 절에 인덱스를 거는 게 좋은지, 아니면 ORDER BY 절에 인덱스를 거는 게 좋은지에 대한 문제입니다. 정답은 하나가 아닙니다. 데이터의 구조, 쿼리의 목적, 그리고 실행 계획에 따라 달라질 수 있기 때문입니다. 이번 글에서는 실제 100만 건의 데이터를 바탕으로 각각의 경우를 비교하고, 어떤 인덱스 전략이 더 효율적인지 실행 시간과 실행 계획을 통해 확인해 보겠습니다. 실습CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), department VARCHAR(100), salary INT, created_at TIMESTAMP DEFAU..

SQL 2025.04.17

[DB Optimization#13] ORDER BY 문 튜닝

정렬(ORDER BY)은 비싼 작업입니다MySQL에서 ORDER BY는 생각보다 성능 비용이 큰 연산입니다.특히 데이터가 많을수록 정렬에 드는 리소스는 기하급수적으로 늘어나기 때문에 최대한 정렬 작업을 피하거나, 미리 정렬된 상태에서 데이터를 가져오는 방식으로 바꾸는 것이 핵심입니다. 이번 글에서는 ORDER BY와 LIMIT 조합에서 인덱스를 어떻게 활용하면 성능을 개선할 수 있는지 실습을 통해 살펴보겠습니다. 실습CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), department VARCHAR(100), salary INT, created_at TIMESTAMP DEFAULT CURREN..

SQL 2025.04.17

[DB Optimization#12] 인덱스가 안 먹히나요?

MySQL에서 인덱스를 걸어도 예상과 달리 EXPLAIN 결과에 Full Table Scan이 찍히는 경우가 있습니다.“인덱스를 걸었는데 왜 작동하지 않지?”라는 의문이 드는 순간, 우리는 쿼리 작성 방식을 돌아봐야 합니다. 이번 글에서는 실제 인덱스를 무력화되는 대표적인 상황을 실습을 통해 알아보고, 어떻게 쿼리를 고쳐야 인덱스를 제대로 활용할 수 있는지 소개합니다. Case 1CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), age INT);SET SESSION cte_max_recursion_depth = 1000000;INSERT INTO users (name, age)WITH RECURSIVE ..

SQL 2025.04.17