일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 팀 분석
- 데이터 분석
- 직원 이직여부
- 포스코 아카데미
- 데이터분석
- 영상제작기
- 삼성 SDS
- Brightics를 이용한 분석
- 삼성SDS
- 직원 이직률
- 추천시스템
- 삼성SDS Brightics
- 포스코 청년
- 캐글
- 노코드AI
- Brightics Studio
- 혼공
- 모델링
- 브라이틱스
- Brigthics Studio
- 혼공머신
- 브라이틱스 서포터즈
- 삼성SDS Brigthics
- 혼공학습단
- 혼공머신러닝딥러닝
- Brigthics를 이용한 분석
- Brightics
- 개인 의료비 예측
- 삼성 SDS Brigthics
- Brigthics
- Today
- Total
데이터사이언스 기록기📚
[시계열 분석] 1장-2장 정리 본문
Ch.1 시계열 데이터와 분석의 정의
1. 시계열 분석
- 정의 : 시간 순서대로 정렬된 데이터 -> 의미 있는 요약, 통계 정보 추출
- 과거가 미래에 어떠한 영향을 주는가?로 인과관계 다루는 질문으로 요약
2. 시계열 데이터 특징
- 기록은 시간의 흐름따라 서로 연결된 형태
- 규칙적인 간격으로 수집되어야 함
- 장기적으로 기록 되어야 함
Ch.2. 시계열 데이터 전처리 과정에서 발생할 수 있는 문제
2-1. 시계열 데이터는 어디서 찾는가
1) 학습과 실험 목적에 맞는 데이터셋 찾기
시계열 데이터의 문제점
- 불완전한 타임스탬프 (연도 없이 월, 계절로 구성)
- 데이터에 수평이나 수직이 될 수 있는 시간축 (시간의 경과 = 시간축으로 생각 가능)
- 시간에 대한 다양한 관념 (연속성을 가진다!가 중요한 의미 - 사건의 정렬된 순서. 사건의 측정 간격이 일정한지 알아내기) (X축이 유의미한 방식으로 정렬 + 거리는 구체적인 의미를 가짐)
2) 시간형태가 아닌 데이터에서 시계열 생성
- 타임스탬프가 찍힌 데이터 식별 -> 시계열 변환 및 다듬기 -> 다른 타임스탬프 찍힌 데이터 결합
Ex) 특정 고객과의 거래에 대한 시계열 수집
시계열을 구성할 수 있는 방법
- 타임스탬프가 찍힌 이벤트 기록 (데이터에 타임스탬프 존재, 파일에 접근한 시간 기록)
- 데이터가 명시적으로 시간을 포함하지 않지만, 데이터셋의 숨은 논리로 시간 설명 (변수 중 하나를 시간에 대응할 수 있는 경우)
- 물리적 흔적(단일 벡터)
2-2. 테이블 집합에서 시계열 데이터 집합 개선하기
시계열 분석 예시
- 시간이 지나면서 바뀌는 메일 수신자 반응
- 멤버십 내역 : 회원이 회원 자격을 상실한 기간이 있었는지
- 거래 내역 : 소비자가 특정 항목을 언제 구매할지 예측할 수 있는지
시계열 데이터 집합 조립하기
- 서로 다른 스탬프방식 + 데이터 세분화의 수준 고려 = 데이터 목록 정렬
사전관찰
- 미래의 어떤 사실을 안다
- 데이터를 통해 실제로 알아야 하는 시점보다 더 일찍 미래에 대한 사실을 발견하는 방법
- 미래에 일어날 일에 대한 정보가 모델에서 시간을 거슬러 전파되어 모델의 초기 동작에 영향을 주는 방법
- 사전관찰을 위한 자동화된 코드, 통계적 테스트는 없음
시계열 다룰 시 주의해야하는 특징
- 한 주의 주기를 정하는 것이 좋음(일~토 or 월~일)
- 어떤 주에 null 값이 있는지도 중요
시계열 데이터 특화된 기법
- 해결하고자 하는 문제에 맞는 형태로 데이터 간격 교정
: 구체적인 시간 정보 -> 간략하게
- 사전관찰 피하기
: 가용 데이터 생산(?)하는 타임스탬프 데이터에 사용하지 않음
: 아직 알아서 안되는 정보인 타임스탬프 사용하지 않기
- 아무일도 일어나지 않아도 관련된 모든 기간 기록하기
: 합계가 0이어도 유익한 정보
2-3. 타임스탬프의 문제점
1. 무엇에 대한 타임스탬프인지 보기
- 타임스탬프 생성과정, 방법, 시기에 대한 질문 던지기
- 사건 기록이 실제와 일치하지 않는 경우가 있음
-앱 기록 시점, 서버로 다운로드 된 시점 등 다양한 의미를 가질 수 있음
=> 해결방법 : 데이터 수집 및 축적에 해당하는 코드 읽기, 코드 작성한 사람과 얘기해보기
(데이터 처리 공정에 대한 이해도 필요)
2. 타임스탬프를 추측하여 데이터 이해하기
- 타임스탬프에 대한 초기 가설 세우기 (사용자를 통해 동일한 패턴인지 이례적인 패턴인지)
- 분석하며 타임스탬프에 대한 가설 시험(현지시간인지 세계 표준 시간인지)
- 시간차이(타임 - 타임.시프트(-1)) => 분석에 활용할 수 있는 특징 => 사용자 시간대 추정 가능
3. 의미 있는 시간규모
- 연구 대상 도메인에 대한 지식 + 데이터 상세 수집 방식 근거
- 예) 일주일 기록, 매일 기록하지 않고 대략적인 일일 수치 추정해서 기록 -> 기억의 인지편향으로 옳지 않음 -> 일 단위에서 주 단위로 바꾸는 것이 좋음
2-4. 데이터 정리
1. 누락된 데이터(결측치)
- 결측치가 자주 발생하는 상황 : 비시계열 << 시계열
- 이유 : 시간축의 시계열 데이터 샘플링하기 어려움
- 해결하는 일반적인 방법
- 대치법(imputation) : 데이터 전체 관측에 기반하여 누락된 데이터 넣기
- 보간법(interpolation) : 대치법의 한 형태. 인접한 데이터를 사용하여 누락된 데이터 추정
- 영향받은 기간 삭제 : 누락된 데이터 완전히 사용하지 않는 방법
- 데이터 보존 vs 삭제 : 상황 + 기간 희생 가능여부
- 예제에 쓰이는 결측치 해결 방법
- forward fill : 누락되기 직전 값으로 채우는 것
- 기록된 데이터 외에 확신할 수 있는 것이 없기 때문
- 실제값 범위를 많이 벗어나지 않음
- 장점 : 계산 복잡하지 않음. 실시간 스트리밍 데이터에 쉽게 적용 가능, 대치 작업 능숙히 처리
- 단점 : 실제 관측값보다 임의의 노이즈 포함할 수 있음
- backward fill : 이후에 발생한 값을 누락 값으로 채우는 것
- 주의할 점 : 사전관찰. 데이터 사용 -> 미래 예측하지 않음 or (특정분야 지식 기반) 데이터 미래보다 과거를 채우는 것이 의미 있는 경우
- 이동평균 : 전체 평균(??) + 최근 과거의 여러 시간대를 입력한 내용 사용
- 과거의 값 -> 미래 값 예측 이라는 측면에서 forward fill과 유사
- forward fill보다 이동평균을 사용해야 하는 상황
- 전체 평균에 대한 개별 데이터값 의심할 만한 이유 있다면
- 장점 : 임의의 노이즈 일부 제거할 수 있음
- 고려할 점 : 과거 데이터만으로 이동평균값 구할 수 있는지, 사전관찰 수월하게 만들 수 있는지
- +) 데이터셋의 평균으로 누락된 데이터 대치하기
- 시계열에서 전체 평균을 적용 = 사전관찰(미래를 들여다 보는 것)
- 보간법 :전체 데이터를 기하학적인 행동에 제한하여 누락된 데이터값 결정
- 보간법 종류 : 선형, 다항식 등등
- 선형 보간법 : 누락된 데이터가 주변 데이터에 선형적인 일관성을 갖도록 제한
- 사용하는 경우) 시간에 따라 시스템이 동적하는 방식 알고있을 때
- 선험성(prior) 사용 가능 (이미 알고 있는 지식에 기반하여 선형적인 경향만 사용하겠끔 제한 가능)
- 과거와 미래의 데이터 모두 활용 or 둘 중 하나만 활용할 수 있음
- 주의) 미래 데이터 보간에 사용, 사전관찰을 만들지 않거나 사전관찰이 생기더라도 문제가 되지 않는다는 확신이 있어야 함
- 사용 적절한 경우(선형적으로 움직이는 것) vs 적절하지 않는 경우 (선형적인 추세로 움직이지 않음)
- 적절 : 연도에 따른 온도변화 추세 알고 있음, 성장 중인 사업 판매 데이터
- 적절X : 기상 데이터 강수량, 일일 수면시간 기록
- 결측치 주의사항
- 데이터 무작위 누락 사실 증명하기 어려움(누락값이 무작위일 경우는 낮음)
- 결측치가 만드는 불확실성에 대한 이해 -> 다양한 시나리오 만들기, 데이터 수집 과정에 연관된 사람들과 대화
- 결측치 처리 방법 : 작업의 데이터 용도 설명할 수 있어야 함 (사전관찰 주의, 후속 작업이 사전관찰에 심각한 영향을 미치는지 판단할 수 있어야 함)
2. 업샘플링과 다운샘플링
- 정의: 업샘플링(타임스탬프 빈도 늘리는 것), 다운샘플링(타임스탬프 빈도 줄이는 것)
- 사용하는 경우 : 시계열 데이터 출처 다른 경우
- 다운샘플링 사용하는 경우
- 원본 데이터 시간 단위가 실용적이지 않은 경우
- 너무 자주 측정하는 경우 - 매 n개의 요소를 추출하여 줄이기
- 계절 주기의 하나의 특정 부분에 집중하는 경우
- 겨울에만 측정 - 년간 1월 정보만 사용
- 더 낮은 빈도의 데이터에 맞추는 경우 : 데이터 특성에 따라 평균 및 합계로 나타내기
- 업샘플링 사용하는 경우 : 실제로 측정한 것은 아니지만 드물게 측정된 데이터에서 조밀한 시간 데이터를 얻기 위한 것
* 주의 : 더 많은 시간 레이블 추가는 맞음, 하지만 더 많은 정보가 추가되는 것은 아님
- 시계열이 불규칙적인 상황 -> 규칙적으로 만들기
- 데이터의 시차보다 더 높은 빈도로 변환 - 롤링 조인 이용 가능
- 입력이 서로 다른 빈도로 샘플링된 경우
- 사전관찰 주의하기!!!
=> 변수에 대한 시간적 행동 이해에 따라 다르게 해석할 수 있음
3. 데이터 평활
[목차]
- 평활이 필요한 이유
- 가장 일반적인 지수평활
[평활의 목적]
- 데이터 평활해야하는 이유 : 측정의 이유, 높게 튀는 측정치를 제거하기 위해 (기기의 결함으로 측정치가 높게 뜀 -> 데이터 평활이 필요한 이유)
- 누락된 데이터의 대치와 연관성 있음
- 평활하기 위한 방법으로 사전관찰이 있거나 없는 롤링평균
- 평활할 때 다양한 질문 고려해야 함 : 평활을 하려는 이유가 무엇인지? 평활은 여러 목적에 적합할 수 있음
- 데이터 준비 : 가공되지 않는 데이터가 부적합(이상치) -> 원칙이 필요하기에 평활이 간단히 해결할 수 있음
- 특징 생성 : 많은 특징으로 구성된 샘플 -> 적은 차원 or 적은 특징으로 줄이기
- 예측 : 간단한 형식의 예측은 '평균 회귀' - 평활된 특징으로 예측하여 얻을 수 있음
- 시각화 : 노이즈가 낀 산점도에 신호추가? 그 의도는?
- 평활이 있고 없음의 결과
- 만든 모델 - 노이즈가 낀 데이터 or 상관관계 없는 데이터 가정? 평활이 이런 가정과 절충?
- 상용 모델도 평활 필요? -> 사전관찰을 동반하지 않는 평활 기법 선택해야 함
- 평활에 대한 원칙을 세웠는지?
- 하이퍼파라미터 찾는 데 Grid Search를 수행? - 교차검증에서 어떻게 시간을 인식하도록 하며, 미래의 데이터가 과거로 유출되지않는지 확인
[지수평활]
- 정의 : 최근 데이터에 많은 가중치를 주어 시간의 특성을 잘 인식할 수 있도록 함, 시간의 특성 더 잘 인식
+) 이동평균 : 결측치를 주변값의 평균으로 대치
(p.92 참고해서 코드 한 줄이라도 작성해서 올리기)
- 단순한 지수 평활은 장기적 추세의 관점에서는 예측을 잘 수행하지 못함
- 여러가지 평활 기법
평활 기법 | 사용법 |
홀트의 방법, 홀트-윈터스 평활 | 추세, 추세+계절성 모두 가진 데이터 적용가능한 지수평활 방법 |
칼만 필터 | 변동성 및 측정 오차의 조합으로 모델링 (시간 전후의 데이터 모두 고려, 과거로 정보가 유출 될 수 있음) |
LOESS | 지역적으로 데이터 평활하는 비모수적 방법 (시간 전후의 데이터 모두 고려, 과거로 정보가 유출 될 수 있음) |
- 예측의 형식으로 평활 사용하는 것이 일반적
2-5. 계절성 데이터
- 정의 : 특정 행동의 빈도가 안정적으로 반복해서 나타나는 것
(p.96 참고하여 작성)
2-6. 시간대
- 시간대를 이해하기 복잡한 이유
- 시간대는 정치적, 사회적 결정에 의해 형성
- 표준 시간대 정보 전송하는 표준 방법 없음(언어 or HTTP)
- 시간대 이름, 서머타임 시작 및 종료를 결정하는 방법이 없음
- 서머타임으로 한 해 몇 시간씩 시간의 중복 발생
+) datetime.datetime.now() : 시간대를 인식한 타임스탬프 반환하지 않음. 시간대 정보 유무와 관계 없이 datetime 객체 허용(시간대 자체에 대한 정보는 없음???)
- 시간대 찍힌 객체는 pickle로 저장하기 어려움(pickle : 파이썬 객체 -> 바이트 저장)
- utcnow()와 now()의 차이(p.99~102 다시 보고 정리)
- timezone(시간대 관련 작업하기 위해 객체 생성 - 시간 현지화 가능)에 대한 내용도 정리
2-7. 사전관찰의 방지
시간 관련 데이터 전처리 - 사전관찰로 세심함이 필요!
- 사전관찰을 확정 진단하는 방법은 없음
- 시계열 분석은 알려지지 않는 것을 모델링하는 것 -> 모델 상용화 후 누락된 데이터 발생, 내용 반영하지 않음을 알 수 있음
- 사전관찰 방지
- 데이터 변환(평활, 대치 ,업샘플링, 데이터 밀고당김 등) 시, 해당 시점에서 무엇을 할 수 있는지 확인하기
- 데이터의 전송 지연도 고려
- 사후 공정 검사, 모델 구축 계획시 필요한 사항
- 결측치 대치 및 평활) 사전관찰의 도입이 결과에 어떤 영향을 주는가?
- 대치와 평활이 어떻게 동작하는지 확인
- 공정 임의 지점을 검사 -> 시간 정보가 부적절한 위치로 이동했는지 알아보기
- 타임스탬프와 관련된 지연 확인
- 시간을 인식할 수 있는 에러(롤링) 검사 or 교차검증 사용
- 시계열에서 train,test 셋 무작위로 섞는 것은 유효하지 않음!!!! - 사전관찰이기 때문
- 의도적인 사전관찰 도입 - 모델의 동작 확인
- 정확도에 생기는 변화에 대한 감을 익힐 수 있음
- feature를 추가하여 성능의 큰 향상이 있는지 확인
- 사전관찰의 경우, 특정 feature가 매우 좋은 경우가 있음
✔️참고문헌
'Data > 시계열 분석' 카테고리의 다른 글
[시계열 분석] Ch.4 정리 (0) | 2024.03.28 |
---|---|
[시계열 분석] CH.3 정리 (0) | 2024.02.23 |